我正在努力学习指针,但我遇到了一个我不明白的情况。
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
关于c - `int` 数组中的无效输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26398587/