今天繼續看指標與陣列陷入深深地不知該如何寫心得中,指標*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真是令人頭昏目眩的寫法