Nejste přihlášen/a.

Přihlásit se do poradny

 

C - ukazatele, zjištění délky pole

Od: pavelv* odpovědí: 3 změna:

Zdravím, lze nějak zjistit velikost statického pole předaného přes ukazatel v C?
Mám:
char *pole[]={"prvek1","prvek2"};
int *p;
p = pole;

A pokud zavolám funkci sizeof(pole) dostanu výsledek 14 a to když podělím sizeof(pole[0]) mám 2.

Ale pokud zavolám sizeof(p) dostanu velikost pointru, tedy 4. Lze i takhle nějak zjistit velikost pole?

 

 

3 odpovědi na otázku
Řazeno dle hodnocení

 

 

hodnocení

1x
avatar rumicek

Máš tam zmatek, protože pole je dvourozměrné a p je jednorozměrné.

p je jen pointer a proto má délku 4.

pole je staticky deklarované a proto už kompilátor ví, že to jsou 2 pointry. Kdyby tam nebyla inicializace, mělo by délku 4.

Funkce sizeof nezjišťuje skutečnou velikost za chodu, ale deklarovanou velikost (velikost při kompilaci).

doplněno 31.12.14 01:59:

Tak to v céčku nelze nijak zjistit. Musíte buď předávat i rozměr nebo používat nějakou ukončující hodnotu (char používá binární nulu.)

pavelv*
hodnocení

No dobře, ale jak teda zjistím velikost pole předaného přes ukazatel?

 

hm*
hodnocení

0x

Zajímavé. Moje gcc na sizeof(pole) vypíše 8 (velikost dvou ukazatelů). A nepodařilo se mi ho přimět, aby napsalo celkovou velikost.

Jinak tam přiřazuješ nekompatibilní proměnné, do int* dáváš char*.

 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]