簡體   English   中英

`int`數組中的輸出無效

[英]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]

參見C運算符優先級, []*之前處理

這意味着

(num+1)[1]
*((num+1)+1)
*(num+2)

加上附加* (不是我的例子中寫的),
它變成了第二件事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM