今天來記錄一個簡單的概念sizeof,sizeof可以幫助計算型態, 結構體, 與陣列, 與指標的大小,例如
short: 2bytes
long: 4 bytes
double: 8 bytes
double arrary[20]: 160 bytes
值得注意的是指標在32位元作業系統是4 bytes (32/8=4)到了64位元作業系統是8 bytes,由此可知若在64位元作業系統底下,指標拿來指向short反而會浪費記憶體。
雖然在C++中陣列本身就是指標,可以直接將陣列丟給指標變數不會報錯*ptr = arrary,但將陣列丟給sizeof時會自動轉換成計算整個陣列大小。如
int arrary[20];
int *ptr = arrary;
count << sizeof arrary <<endl; //get 80 bytes
count << sizeof *ptr <<endl; //get 4 bytes in 32-bits os, 32/8=4
昨天我們輸出結果可以看出來p的記憶體位置與*ptr1的記憶體位置差4bytes(因為int型態佔4bytes),而*ptr1與**ptr2與***ptr3各差了8bytes(在64位元系統中64bits=8bytes)
**ptr3指向p記憶體位置:0x7fffffffdb0c
*ptr3指向ptr1的記憶體位置:0x7fffffffdb10
ptr3指向ptr2的記憶體位置:0x7fffffffdb18
取得ptr3記憶體位址:0x7fffffffdb20