[ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.06.12
Prihlásený: 23.04.22
Príspevky: 64
Témy: 27 | 27
NapísalOffline : 29.10.2012 18:21 | "sizeof"

ahojte mohol by mi niekto napísať podrobnešie čo sa s čím delí keď mám

int mat[3][3] = {{5,6,2},{7,8,1},{3,6,5}};


int pocetRiadkov = sizeof(mat)/sizeof(mat[0]);
int dlzkaRiadku = sizeof(mat[0])/sizeof(int);

teda by som chcel vedieť čo je pod pojmom sizeof(mat) a podobne teda aká sú tam hodnoty pretože sa v tom strácam .. ďakujem.


Offline

Skúsený užívateľ
Skúsený užívateľ
"sizeof"

Registrovaný: 11.01.09
Prihlásený: 18.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 29.10.2012 18:37 | "sizeof"

Rozlozme si zapis int mat[3][3] = {{5,6,2},{7,8,1},{3,6,5}};

-prva lomena zatvorka s trojkou pri mat znamena, ze premenna mat bude mat 3 prvky ( cize pole o velkosti troch prvkov ). Dalsia trojka v lomenej zatvorke znamena, ze kazdy prvok bude mat dalsie tri prvky. Kedze sa jedna o pole typu int, samotne pole bude mat velkost 3 * 3 * velkost typu int, co ziskas zapisom sizeof(int) ( vacsinou sa jedna o 4 bajty, zavisi to od prekladaca a inych faktorov ). To znamena, sizeof(mat) bude 3 * 3 * 4 = 36 bajtov.

mat[3] je iba prvy prvok pola mat, a kedze prvy prvok obsahuje iba tri cisla typu int, tak to je 3 * sizeof(int) = 3 * 4 = 12.

Staci si to iba takto jednoducho porozkladat a myslim, ze hned sa to lahsie chape. V kazdom pripade, stale si mozes nejaku konkretnu hodnotu sizeof() nechat vypisat, ak si nie si isty:
Kód:
printf( "%d", sizeof( mat[0] ) );


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.06.12
Prihlásený: 23.04.22
Príspevky: 64
Témy: 27 | 27
Napísal autor témyOffline : 29.10.2012 19:39 | "sizeof"

no ale teda sizeof"(mat[0])" bude 1*4 teda nulu rátam ako jeden prvok alebo 0*4 ?
keď som to pozrel príkazom printf( "%d\n", sizeof( mat[0] ) má to byť 12 .. teda 3*4 ?


Offline

Skúsený užívateľ
Skúsený užívateľ
"sizeof"

Registrovaný: 11.01.09
Prihlásený: 18.05.24
Príspevky: 1385
Témy: 9 | 9
Bydlisko: Hrinova
NapísalOffline : 29.10.2012 19:52 | "sizeof"

Jo, dal som zly priklad - nemalo tam byt mat[3] ale 0, zaplietli ma tie cisla.
Co sa tyka velkosti, tak mat[0] ma rovnaku velkost, ako mat[1] aj mat[2]. mat[0] ma tri prvky {5,6,2} , mat[1] ma tri prvky {7,8,1} , mat[2] ma tri prvky {3,6,5}. Stale si to takto rozloz. To cislo v zatvorke nehra rolu vo velkosti, je to len index pola. Kedze kazde toto pole ma tri prvky, 3*4=12 pre kazde pole mat[0], mat[1], mat[2].
Snad uz to je pochopitelnejsie.


_________________
Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS.
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.06.12
Prihlásený: 23.04.22
Príspevky: 64
Témy: 27 | 27
Napísal autor témyOffline : 29.10.2012 19:56 | "sizeof"

už chápem .. ďakujem :)


 [ Príspevkov: 5 ] 


"sizeof"




© 2005 - 2024 PCforum, edited by JanoF