iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0

今天來記錄一個簡單的概念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

上一篇
Day19-多重指標
下一篇
Day21
系列文
少年DevOps的C++奇怪漂流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言