Konec pole – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Konec pole – C / C++ – Fórum – Programujte.comKonec pole – C / C++ – Fórum – Programujte.com

 

Janek
~ Anonymní uživatel
56 příspěvků
5. 7. 2009   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 85.92.39.–
meneltharion0
Návštěvník
5. 7. 2009   #2
-
0
-

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.

Nahlásit jako SPAM
IP: 212.96.176.–
Datlik0
Návštěvník
6. 7. 2009   #3
-
0
-

no me napada pouzit na pole sizeof dejme tomu 32 a pak to vydelit velikosti int dejme tomu 4 a mas pole o osmi prvcich ne?

Nahlásit jako SPAM
IP: 85.13.98.–
meneltharion0
Návštěvník
6. 7. 2009   #4
-
0
-

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).

Nahlásit jako SPAM
IP: 212.96.176.–
nikto
~ Anonymní uživatel
24 příspěvků
6. 7. 2009   #5
-
0
-

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
}

Nahlásit jako SPAM
IP: 217.118.98.–
meneltharion0
Návštěvník
6. 7. 2009   #6
-
0
-

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.)

Nahlásit jako SPAM
IP: 212.96.176.–
meneltharion0
Návštěvník
6. 7. 2009   #7
-
0
-

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.

Nahlásit jako SPAM
IP: 212.96.176.–
nikto
~ Anonymní uživatel
24 příspěvků
6. 7. 2009   #8
-
0
-

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).

Nahlásit jako SPAM
IP: 217.118.98.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

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

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý