wingo1990

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

对于数组指针的一点理解

  今天做到了个题目是关于数组指针的。题目将二维数组转为用数组指针的形式表达,搞的我很乱啊!所以对于数组指针我们到底应该怎么理解呢!

下面看一个例子,感觉是非常经典的:

 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;

在内存中存在的形式,只要弄清了这点,一切皆迎刃而解。下图便就是这个数组指针的内存存在状态:

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

posted on 2013-07-15 23:39  wingo1990  阅读(669)  评论(0)    收藏  举报