关于c语言问题求解答!

img


最后输出结果为12怎么算出来的?
还有上面定义的一维数组到下面怎么成二维了?

并不是变成二维数组了,只是*p[4]是个指针数组里面存放了四个地址,分别为 p[0] = &a[0] p[1] = &a[3] p[2] = &a[6] p[3] = &a[9];
输出是通过指针偏移来访问也就是访问a[11] = 12

1、12的原因,p[3][2]就相对于a[11]。
2、一维变二维的原因,p定义就是一个二维数组,int *p[4]的意义就是存放4个int 的指针。指针指向的就是int类型的一段连续内存。
3、p[i] = &a[i
3],当i=0的时候,p[0][0] = a[0],p[0][1] = a[1],p[0][2] = a[2],i++之后就类似的。