Miten saa selvitettyä taulukossa olevien kohteiden määrän, kun se koostuu Struct -tietotyyppisiä kohteista?
sizeof(taulukko) / sizeof(taulukko[0])
Ainakaan ylläoleva kikka ei palauta oikeaa tietoa.
Netistä en ole ratkaisua onnistunut löytämään.
Kyllä koko taulukon koon suhde taulukon yksittäisen alkion kokoon kertoo alkioiden lukumäärän riippumatta alkion tyypistä. Toisaalta standardinmukaista C++:aa käyttäessä taulukon alkioiden lukumäärä ei määräydy ajonaikana, joten oletettavasti tieto on helpompaa katsoa itse taulukon määrittelystä.
Valistunut arvaukseni on toki se, että ongelman ydin piilee juuri taulukko-nimisen muuttujan määrittelystä, luultavasti vähän samaan tapaan kuin lauseke "int liukuluku;" ei esittele liukuluku-tyyppistä muuttujaa.
Pitää muistaa, että tuo taulukon koon laskenta toimii vain silloin, kun taulukon koko on muutenkin näkyvillä. Jos taulukko annetaan esim. funktion parametriksi, siitä välittyy vain osoitin, jolloin tuo koodi ei toimi. Sama koskee dynaamisesti (malloc-funktiolla tms.) varattuja taulukoita.
FOO taulukko[100]; // OK: sizeof(taulukko) antaa muuttujana määritellyn taulukon koon oikein. void f(FOO taulukko[]) { // FAIL: sizeof(taulukko) antaa osoittimen koon, sama kuin sizeof(FOO*). } FOO* taulukko = malloc(100 * sizeof(FOO)); // FAIL: sizeof(taulukko) antaa osoittimen koon eli sizeof(FOO*).
Aihe on jo aika vanha, joten et voi enää vastata siihen.