Svaki tip u C/C++-zauzima određenu količinu memorijskog prostora (kao uostalom i u većini programskih jezika).
Bajt je sekvencijalni niz bitova konstantne (unapred predodređene) veličine. Na najvećem broju sistema ova predodređena veličina je 8, ali je to tako zato što je 70-tih i 80-tih vladalo carstvo 8-bitnih procesora u širokim narodnim masama pa se to pretvorilo u neki sinonim.
Bajt je takođe i najmanji mogući deo računarske reči (word) nad kojim je moguće izvršiti neku operaciju. Word je stvar dizajna nekog procesora i upravo po tome imamo različite procesore (4-bit, 16-bit. 32-bit, 64-bit itd.) koji u stvari predstavljaju veličinu reči.
Zbog čega ceo ovaj uvod?
Zato što na kraju krajeva C odnosno C++ operiše sa parčetom memorije. Šta se nalazi u tom parčetu memorije nije toliko značajno jer se lako da promeniti prostim kastovanjem.
Na primer:
Code:
int test = 6381921; //0x00616161
U memoriji je predstavljen sa 4 bajta na 32-bitnim sistemima. U slučaju da ne znamo veličinu tipa možemo da koristimo sizeof:
Code:
std::cout << sizeof(test) << std::endl;
promenjiva test u memoriji sistema je predstavljena ovako:
1 bajt 2bajt 3bajt 4bajt
01100001 01100001 01100001 00000000
Ako sada promenimo tip koji pokazuje na tu adresu u char dobijamo klasican C string.
Code:
char *nesto = (char*)&test;
std::cout << nesto << std::endl;
ovaj kod ce da ispise
aaa zato sto u memoriji vidi tri bajta koji u sebi imaju vrednost ascii 97 i cetvrti 0 koji predstavlja zavrsetak standardnog c stringa.
Ovo ne znaci da je char int ili da je int skup karaktera. Ovo samo pokazuje kako se moze pristupiti memoriji na razlicite nacine jer jezik operiše direktno nad memorijom.
Tko leti vrijedi