I\'m trying to access a 2D array using double pointer
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
Rather than ...
int x[2][2] = {{10, 20},{30, 40}};
int **xpp;
xpp = (int**)x;
... realize that x
in the expression converts to a pointer the address of the first element. The first element of x
is x[0]
which has a type of int [2]
, so the type needed is int (*)[2]
or 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]);
Output
0xffffcbd0 (sample)
0xffffcbd0 (sample)
10
10 20 30 40
Tip: avoid casting - it often hides weak programming.