Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C, C++: Arduino, Structuret ja taulukon koko

mikkokh [24.11.2018 23:04:51]

#

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.

eq [27.11.2018 22:26:19]

#

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.

Metabolix [27.11.2018 23:12:20]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta