码迷,mamicode.com
首页 > 其他好文 > 详细

二维数组指针

时间:2014-07-05 18:13:03      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:amp   计算机   第一个   存储   总结   指针   

关于一维数组的指针

例子:

int a[3]={1,2,3};

int *p=a;

printf("%d",*p);

输出为1

一维数组指针就是该一维数组第一元素的地址,取值运算*结果是第一个元素存储值。

 

再看二元数组

例子:

int v[2][5]={{1,2,3,4,5},{6,7,8,9,10}};

int (*a)[5]=v;

printf("%p,%p\n",a,a+1);

printf("%p,%p\n",*a,*(a+1));

输出:

002BF77C,002BF790

002BF77C,002BF790

 

为什么a和*a的结果相同?

a[2][5]就是两个包含5个int的一维数组组成的二维数组。这个数组的每个元素(a[0]和a[1])都是一个一维数组。类比一维数组指针的解释,a指向第一个数组元素的地址,也就是a[0]地址。a[0]这个一维数组的地址就是a[0][0]的地址。所以,a==&a[0][0]。

*a的值就是第一个元素的值。*a等于数组a[0]的值。a[0]的值包含五个int。计算机不会遇到*a,就输出5个值,而是将五个值,也就是数组的首地址输出。给出首地址,进一步就能访问这五个值了。由此看出,二维数组指针是个双指针。*a==v[0]; v[0]=&v[0][0];=>**a=a[0][0]。

 

总结

1、二维数组指针和一维数组指针在取值运算的结果含义并不相同。一维数组指针取值结果是数组首元素的值。二维数组指针取值运算结果是首元素地址。二维数组指针取值结果的这种处理方式使得其结果是一个值。这在形式上和一维数组指针取值是相同的,但含义不同。

2、数组的地址用首地址表示,数组的值如果要用一个值输出,那就输出数组的地址。

二维数组指针,布布扣,bubuko.com

二维数组指针

标签:amp   计算机   第一个   存储   总结   指针   

原文地址:http://www.cnblogs.com/dream-of-snail/p/3822900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!