簡體   English   中英

c中的雙指針和2d數組

[英]double pointers and 2d arrays in c

我正在嘗試使用雙指針訪問2D數組

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]指向int的數組2的指針

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

提示:避免投射 - 它經常隱藏弱編程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM