dobry den, možná je to trivialní otázka ( ... ale jsem z těch návodů a postupu na inetrnetu jelen, některé se navzájem vylučují .. jiné nefungují ...).. Jak se dá zjistit konec pole když neznám jeho velikost ? Předem díky za odpověd.
Fórum › C / C++
Konec pole
Nedá (kromě toho, že při přístupu za konec pole program spadne).
Toto samozřejmě platí pro primitivní pole (int pole[30]), ne pro pole reprezentovaná objektem (např. třída std::vector), kde se to dá tuším zjistit snadno.
Proměnná, která reprezentuje pole (např. "pole" v mém předchozím příspěvku) je vlastně ukazatel na první znak pole. A když dáš sizeof(pole), vrátí ti to jenom velikost toho ukazatele (pravděpodobně 4 bajty).
To meneltharion : Pole nie je ukazatel; ale ukazatel moze ukazovat na zaciatok pola - to su 2 rozdielne veci. Ten postup ktory Datlik popisal funguje, avsak iba ked ma kompilator dotatok informacii aby to vyriesil pri kompilacii. tj.:
void f(int *p) {
cout << sizeof(p)/sizeof(int) //ukaze 1
}
int main() {
int a[5];
cout << sizeof(a)/sizeof(int) //ukaze spravne 5
}
To nikto: Já jsem neříkal, že pole je ukazatel, ale že proměnná reprezentující pole je ukazatel (na první prvek pole). Ale máš pravdu, že pokud je pole alokováno staticky, sizeof(pole) vrátí velikost pole v bajtech. Na druhou stranu ale moc nerozumím, jak to využít. (Když už tu velikost pole známe.)
Mimochodem podle wikipedie
sizeof is generally a compile-time operation, although in C99 it can be used at run-time to find the size of a variable length array.
by to mělo v novějších implementacích fungovat i pro dynamická pole (jestli to dobře chápu). Kompiler ve Visual C++ 2008 (EE) tomu ale zrovna nenasvědčuje.
To meneltharion : Zaujimave, to o tych premenlivo dlhych poliach som nevedel. Kazdopadne, C99 este nie je hotovy a dynamicke polia sa tym nemyslia. Konkretne posledny draft C99 ako priklad uvadza toto:
size_t fsize3(int n)
{
char b[n+3]; // variable length array
return sizeof b; // execution time sizeof
}
(strana 80)
Toto by podporovane byt malo(teda aspon v gcc -std=c99 je).
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Konec vstupu — založil xeres
Konec programu — založil Idospekr
Po 2 vete konec — založil Anonym
Konec INVEXu — založil Nefaritus
Konec běhu programu — založil Polarski
Moderátoři diskuze