c中的双指针和二维数组
double pointers and 2d arrays in c
我正在尝试使用双指针访问二维数组
int x[2][2] = {{10, 20},{30, 40}};
int *xp;
int **xpp;
printf ("%d %d\n%d %d\n", x[0][0], x[0][1], x[1][0], x[1][1]);
printf ("\n");
xp = *x;
printf ("%d %d\n%d %d\n", *xp, *(xp + 1), *(xp + 2), *(xp + 3));
printf ("\n");
xpp = (int**)x;
printf ("%d\n", **xpp);
我得到的是:
10 20
30 40
10 20
30 40
Segmentation fault
问题:如何使用xpp
访问数组?
而不是...
int x[2][2] = {{10, 20},{30, 40}};
int **xpp;
xpp = (int**)x;
... 意识到表达式中的 x
将第一个元素的地址转换为指针。 x
的第一个元素是x[0]
,它的类型是int [2]
,所以需要的类型是int (*)[2]
或pointer to array 2 of int。
int (*p)[2];
p = x;
printf ("%p\n", (void *) p);
printf ("%p\n", (void *) *p);
printf ("%d\n", **p);
printf ("%d %d %d %d\n", p[0][0], p[0][1], p[1][0], p[1][1]);
输出
0xffffcbd0 (sample)
0xffffcbd0 (sample)
10
10 20 30 40
提示:避免转换 - 它通常会隐藏弱编程。
我正在尝试使用双指针访问二维数组
int x[2][2] = {{10, 20},{30, 40}};
int *xp;
int **xpp;
printf ("%d %d\n%d %d\n", x[0][0], x[0][1], x[1][0], x[1][1]);
printf ("\n");
xp = *x;
printf ("%d %d\n%d %d\n", *xp, *(xp + 1), *(xp + 2), *(xp + 3));
printf ("\n");
xpp = (int**)x;
printf ("%d\n", **xpp);
我得到的是:
10 20 30 40 10 20 30 40 Segmentation fault
问题:如何使用xpp
访问数组?
而不是...
int x[2][2] = {{10, 20},{30, 40}};
int **xpp;
xpp = (int**)x;
... 意识到表达式中的 x
将第一个元素的地址转换为指针。 x
的第一个元素是x[0]
,它的类型是int [2]
,所以需要的类型是int (*)[2]
或pointer to array 2 of int。
int (*p)[2];
p = x;
printf ("%p\n", (void *) p);
printf ("%p\n", (void *) *p);
printf ("%d\n", **p);
printf ("%d %d %d %d\n", p[0][0], p[0][1], p[1][0], p[1][1]);
输出
0xffffcbd0 (sample)
0xffffcbd0 (sample)
10
10 20 30 40
提示:避免转换 - 它通常会隐藏弱编程。