c - `int` 数组中的无效输出

标签 c pointers

我正在努力学习指针,但我遇到了一个我不明白的情况。

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/

相关文章:

c++ - 高度压缩数字网格

c - 将数据(字符串)越界存储在动态分配的数组中

c - sigaddset 有什么用?

c++ - 指针和数组问题

c++ - 指向类成员函数的指针

c++ - 为什么不能将 *pointer+offset 用作左值? ("error: non-lvalue in assignment")

从函数返回时 C 数组发生变化

java - 在 Java 中释放对象

c - 无符号返回类型返回有符号数 C

我可以安全地将 &char[] 转换为 char** 吗?