int value = 5;
int a[ ] = {2,4,6,9,3,5,7};
int *q1 = &value;
int *q2 = a;
int *q3 = &a[2];
int *p[ ] = { q1, q2, q3 };
cout<<p[0][0]<<" " <<p[1][1] <<" " <<p[2][3];
answer is 5 4 5.
我知道我怎樣才能得到答案?我很困惑,感謝導遊!C++指針表達和陣列
int value = 5;
int a[ ] = {2,4,6,9,3,5,7};
int *q1 = &value;
int *q2 = a;
int *q3 = &a[2];
int *p[ ] = { q1, q2, q3 };
cout<<p[0][0]<<" " <<p[1][1] <<" " <<p[2][3];
answer is 5 4 5.
我知道我怎樣才能得到答案?我很困惑,感謝導遊!C++指針表達和陣列
你需要知道:
表達a[i]
相當於*(a + i)
,所以表達a[i][j]
相當於*(a[i] + j)
這也相當於*(*(a + i) + j)
。
當分配陣列名稱給它衰變爲例如第一元件地址的地址的指針:
int a[ ] = {2, 4, 6, 9, 3, 5, 7};
int *q2 = a;
現在q2
指向是a[0]
第一元件。
閱讀也有一些exceptions where array name not decaying into a pointer to first element?巧妙地@H2CO3回答。
當您將i
添加到指針p
時,它會從p
地址開始指向ith
元素位置。因此,假設id p
指向數組p + 3
中的第二個元素指向數組中的第五個元素(類似地,減法在相反的方向上工作)。閱讀10.2 Pointers and Arrays; Pointer Arithmetic和Pointer Arithmetic。
要回答你的問題:在代碼:
int value = 5;
// 0 1 2 3 4 5 6
int a[ ] = {2, 4, 6, 9, 3, 5, 7};
int *q1 = &value;
int *q2 = a; // address of array a decays into address of first element
int *q3 = &a[2];
int *p[ ] = { q1, q2, q3 }; // can be written as below
最後一行相當於:
int *p [] = { &value, a, &a[2]};
指針P
是pointer to int
陣列,使得p[i]
意味着地址,p[i][j]
爲int值:
p[0][0] == *(p[0] + 0) == *(&value + 0) == *&value == value == 5
p[1][1] == *(p[1] + 0) == *(a + 1) == a[1] == 4
p[2][3] == *(p[2] + 3) == *(&a[2] + 3)
// 0 1 2 3 4 5 6
//int a[ ] = {2, 4, 6, 9, 3, 5, 7};
// +1 +1 +1
== that is value at 3rd location from index 2
== a[5] == 5
// When you add 1 to an address pointer start pointing to next location
@From Dyp:你能理解最後一個表達式爲:
表達*(&a[2] + 3)
被定義爲*(&*(a+2) + 3)
,這等於*(a+5)
和同爲a[5]
:
p[2][3] == *(p[2] + 3) == *(&a[2] + 3) == *(&*(a+2) + 3)
== *((a+2) + 3)
== *(a + 2 + 3)
== *(a + 5) == a[5] == 5
希望這有助於。
'*(&一個[2] + 3)'被定義爲'*(&*(A + 2)+ 3)',其等於'*(A + 5)'和相同'一個[5 ]'。 – dyp
@DyP尼斯損失我想補充我的答案。 –
感謝您的解釋! =) – user2611244
我也很困惑。你期望得到的答案是什麼,它與你所得到的有什麼不同? – jrok
不,我不明白我怎麼能得到的值,如圖... – user2611244
'動態數組allocation'在你的代碼不使用,所以我糾正了冠軍。 –