c - 指向数组的指针地址

标签 c arrays pointers multidimensional-array

下面是一个二维数组的例子。

int s[5][2] = {
            {0, 1},
            {2, 3},
            {4, 5},
            {6, 7},
            {8, 9}
        };

int (*p)[2];

如果我写 p = &s[0]; 没有错误。但是如果我写 p = s[0]; 就会出错,即使 &s[0]s[0] 会给出同一个地址。

请告诉我为什么会有差异,即使两者都提供相同的地址。

最佳答案

地址相同,但类型不同。

&s[0]int (*)[2] 类型,但是 s[0] 类型int [2],衰减为 int *

结果是,当对 p 执行算术运算时,它遍历数组的模式将取决于它的类型。如果您编写 p = &s[0] 然后访问 p[3][1],则您正在访问 s[3][1]。另一方面,如果您编写 int *q = s[0],则只能使用 q 访问 s 的第一个子数组,例如q[1] 将访问 s[0][1]

关于c - 指向数组的指针地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119972/

相关文章:

c - 为什么此 C 代码片段不会导致段错误?

c++ - 使用引用而不是指针有哪些缺点?

javascript - 使用 switch case 的 Google 表单通知脚本

c++ - 将 Arduino 库与 AVR-G++ 结合使用

c - 将一个 char 数组存储到另一个数组中 - c

c - 为什么我不能从数组中删除一个人?

c - C 中的 malloc,但使用多维数组语法

php - 如何获取对应于两个数组中不同值的键?

pointers - 如何修改结构指针类型的接口(interface)值

c - 回到默认的 switch (getch()) 开头? (C)