c - 这两个 C 声明有什么区别

标签 c arrays pointers multidimensional-array

我声明并初始化了一个 2x2 数组,如下所示:

int arr[2][2] = {1, 2, 3, 4};

然后,一个指向整数的指针:

int *p1;

将指针初始化为:

p1 = arr[0];    //p1 points to {1, 2}

现在我可以使用 p1 作为 *p1

打印元素

现在,当我声明时:

int (*ptr)[2][2];
ptr = &arr;

要打印元素,现在我必须使用:

printf("%d\n", *(**(ptr)+1));

这两个声明有什么区别?

最佳答案

int (*ptr)[2][2]; 是指向 2x2 矩阵的指针,而不是指向 int 的指针。由于矩阵的每个维度的行为有点像指针,这就是为什么您需要在 printf 中进行额外的取消引用。

关于c - 这两个 C 声明有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308786/

相关文章:

c - 对 unsigned int 按位或而不发出警告

在 X11 事件循环中可以捕获操纵杆/游戏 handle 事件吗?

c - getter 函数如何知道 setter 函数是否被调用?

java - 推送到定义的二维数组

c - 如何修复 'request for member in something not a structure or union'错误?

java - 通过压缩将 java.awt.Image 转换为 TIFF 字节数组

c - 指针值改变

c - 如何将月份(int)转换为月份名称(字符串)

C++ reinterpret_cast 一个整数

java - 如何使用 JNA 正确映射 `MagImageScalingCallback`?