我正在研究多指针,我观看了这个视频,其中解释说,如果我们想要访问二维数组的值,我们可以使用像这样的双重间接寻址:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
int a[2][2] = {{1,2},{3,4}};
int** p = &a[0][0];
printf("%d", **p);
return 0;
}
但是我得到了
segmentation fault
。如果我改为使用单一间接:
int a[2][2] = {{1,2},{3,4}};
int** p = &a[0][0];
printf("%d", *p);
我得到了正确的值
a[0][0] = 1
。现在,如果我在单向中使用指针算术,
printf("%d", *(p+1));
我得到
a[1][0] = 3
,这是有道理的,因为如果我 printf("%d", sizeof(p))
,我得到 8 个字节。
现在我的问题是,如何使用指针算术得到
a[0][1]
和 a[1][1]
?
提示:启用所有警告
int** p = &a[0][0];
应该警告一下。
取决于间接级别
#define DIM1 7
#define DIM2 2
int a[DIM1][DIM2] = {{1,2},{3,4}};
int (*q)[DIM1][DIM2] = &a;
printf("%d", ***q);
int (*r)[DIM2] = a;
printf("%d", **r);
int *t = a[0];
printf("%d", *t);
int u = a[0][0];
printf("%d", u);
int v = a[1][1];
printf("%d", v);