iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0

今天繼續看指標與陣列陷入深深地不知該如何寫心得中,指標*ptr是專門用來指向物件記憶體位置的類型。在C++中陣列跟指標有密不可分的連結,參考螞蟻書的介紹一個int v[5]陣列的結構可以用下圖表示,而陣列名稱v就是永遠指向v[0]記憶體位置的指標,因為v本身是指標所以可以直接丟給*ptr並透過修改*ptr的記憶體位置即ptr進一步取陣列的每個元素的值,程式碼如下

int main(){

    int v[5] = {1,2,3,4,5}; 
    int *vPtr = v ;  //直接將陣列v丟給指標
    cout << vPtr  << endl ;               //3000
    cout << *( vPtr  + 2)  << endl ;   // 3
    cout <<  vPtr  + 2  << endl ;    //3008
    cout << ++vPtr  << endl ;          //3004,騷操作
    return 0;
}

值得注意的是運算子是有階級的階級高的先執行,因為*階級高於+所以要用括號包起來,若不刮起來 *vPtr+2會變成 v[0]+2,至於為什麼代碼寫vPtr+2 記憶體位置卻+8那是因為int佔4個bytes,2*4=8真是令人頭昏目眩的寫法
https://ithelp.ithome.com.tw/upload/images/20211003/20098886ZAWcReF061.png


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

尚未有邦友留言

立即登入留言