繁体   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