【发布时间】:2021-04-06 11:35:53
【问题描述】:
下面是代码 sn-p 和输出:
int main()
{
int A[2][3] = {{1100, 1200, 1300}, {1400, 1500, 1600}};
int (*p)[3], (**q)[3];
p = A;
q = A;
printf("*p is : %d\n", *p);
//Output : *p is : -547221600
printf("*q is : %d", *q);//Why ?
//Output : *q is : 1100
}
p 是一个指向大小为 3 的整数数组的指针。*p + i 指向 A 中的第 i 个数组,即 A[i]。
如果我改为使用双指针(上面代码中的q)会发生什么。
我无法理解为什么 *q 给出 1100 作为值。
【问题讨论】:
-
TL;DR。
int (**)[3]只能用于指向int (*)[3]类型的_pointers,所以它并不是那么有用。关于此类指针的唯一有效用途是在通过函数参数返回指向数组的指针时,例如void allocate(size_t x, size_t y, int (**p)[x][y]) { *p = malloc(sizeof (int [x][y])); }