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.