[英]Invalid output in `int` array
我正在努力學習指針,我剛遇到一個我不明白的情況。
int main()
{
int num[3][2]={3,6,9,12,15,18};
printf("%d %d",*(num+1)[1],**(num+2));
}
據我所知,輸出應該是:
12 15
但實際上它是:
15 15
為什么? 請詳細說明如何計算事物,我認為首先是*(num+1)
計算並指向第一個,即{9,12}
,然后[1]
應該取消引用第一個元素,即12
。
我正在使用GCC編譯器。
在您的數據中,
int num[3][2]={3,6,9,12,15,18};
相當於:
int num[3][2]={{3,6},{9,12},{15,18}};
即
num[0][0] = 3
num[0][1] = 6
num[1][0] = 9
num[1][1] = 12
num[2][0] = 15
num[2][1] = 18
從而,
*(num+1)[1]
= *(*(num+1+1))
= num[2][0]
=15
和,
**(num+2))
= num[2][0]
=15
數組下標[]
運算符的優先級高於解除引用運算符*
。
這意味着表達式*(num+1)[1]
相當於*((num+1)[1])
如果我們把它拆開
*(*((num+1)+1))
*(*(num+2))
*(num[2])
num[2][0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.