对于数组指针的一点理解
今天做到了个题目是关于数组指针的。题目将二维数组转为用数组指针的形式表达,搞的我很乱啊!所以对于数组指针我们到底应该怎么理解呢!
下面看一个例子,感觉是非常经典的:
1 int main(int argc, char *argv[])
2 {
3 int array[3][4]={
4 1,2,3,4,
5 5,6,7,8,
6 9,10,11,12
7 };
8 int (*parray)[4] = array;
9 printf("%p\n",(*(parray+1)+1));
10 printf("%p\n",parray[1]+1);
11 printf("%d\n",parray[1][1]);
12 printf("%d\n",*(*(parray+1)+1));
13 printf("%d\n",*(parray[1]+1));
14 printf("%d\n",(*(parray+1))[1]);
15 printf("%d\n",*(parray+1)[1]);
16 return 0;
17 }
代码运行的结果如下:

为什么是这样的结果呢?先开始我也是不能理解,经过思考后,重点在于定义的数组指针:
int (*parray)[4] = array;
在内存中存在的形式,只要弄清了这点,一切皆迎刃而解。下图便就是这个数组指针的内存存在状态:

这里我就不一一说明了,只要对着上面的图,所有的结果还是比较容易理解的!
浙公网安备 33010602011771号