I am struggling with the pointer to 2D-array (cf: 2D array of pointers). Can anybody help me elaborate how the pointer x moves in the memory to access the individual of y[2][6], especially the high lighted lines?
I have talked to one of the curators of the forum, but I am still not quite clear.
Here is my code:
#include<stdio.h>
int main(void)
{
int (*x)[2][6]; //pointer for integers array in size of 2x6 (2 rows x 6 columns),
//.i.e the array is always with size of 12?
// int (*a[8])[5]; //Line 9: a is a pointer array of size 8, each for integer array of size 5
int y[2][6] = {{11,12,13,14,15,16},
{21,22,23,24,25,26}}; //2D array of integers
int *z; //pointer to integer
int i;
z = y[0];
for(i = 0;i<6;i++)
printf("%d ",z);
printf("\n");
x = &y; // More complicated situation for me!
x = y; // Warning: incompatible pointer type.
// x[0][0] = y[0][0]; // won't work
printf(" (x[0][0]): %p\n", x[0][0]);
printf(" *(x[0][0]): %d\n",*(x[0][0])); //Q1a
printf(" x[0][0][0]: %d\n",x[0][0][0]); //Q1b
printf("*(x[0][0]+1): %d\n",*(x[0][0]+1)); //Q1c
// printf("*(x[0][0]+2): %d\n",*(x[0][0]+2));
// printf("*(x[0][0]+3): %d\n",*(x[0][0]+3));
// printf("*(x[0][0]+4): %d\n",*(x[0][0]+4));
printf("*(x[0][0]+5): %d\n",*(x[0][0]+5));
printf(" x[0][1]: %p\n", x[0][1]); //Q2a
printf(" *x[0][1]: %d\n",*(x[0][1]));
printf(" x[0][1][0]: %d\n",x[0][1][0]); //Q2b
printf("*(x[0][1]+1): %d\n",*(x[0][1]+1)); //Q2c
// printf("*(x[0][1]+2): %d\n",*(x[0][1]+2));
// printf("*(x[0][1]+3): %d\n",*(x[0][1]+3));
printf("*(x[0][1]+4): %d\n",*(x[0][1]+4));
printf("*(x[0][1][4]): %d\n",*(x[0][4]));
printf("&y: %p\n", &y);
printf(" y: %p\n", y);
printf(" x: %p\n", x);
printf("&x: %p\n", &x);
return 0;
}
1) Although y and &y are the same, but x = y issues warning;
2) Q1a/Q2a is the part I think I understand which is the first element of each row of y.
3) but Q1b/c, and Q2b/c turns out to be 3-D to me.
Can anybody give me a diagram how pointer x moves in the memory for each member of y?
4) Line 9: int (*a[8])[5]; is related, and I put it here for future reference but skip it at this moment.
Thanks a lot!