原创 简单的方式理解多维数组

2010-9-1 12:20 2395 10 10 分类: 软件与OS

 


简单的方式理解多维数组


多维数组对于学习c语言的新手往往成为一个难点,尤其对数组名代表的意义比较模糊,本文用了一种很清晰的思路说明了这些问题。


举例比较容易说明问题,这里用了一个二维数组:


#include "stdio.h"  


int main()  


{   


int b[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};



printf("%d,%d\n",&b,&b+1);


printf("%d,%d\n",b,b+1);


printf("%d,%d\n",*b,*b+1);


printf("%d,%d\n",**b,**b+1);



return 0;



你可以先猜一下输出结果是什么,或者运行一下也可以。


分析:


1、&b是什么?


不要只局限于其值,要明白它的意义。给它加个1可以说明问题(对地址加1和对一个普通的变量加1有着不同的意义。对地址加1,增量是给存储单元占用的字节数)


结果:&b表示整个b数组的地址,加1产生的增量是:


 4 x 1 x 5 x 3 = 60              (4为int 变量占用的字节数 )


2、b是什么?


同上,我们也给它加1,。


结果:加1产生的增量是


4 x 1 x 5= 20



这里把b[3][5] 看成了一个一维数组b[3],但是每个元素大小为5个字节。


3、*b是什么?


同上,我们也给它加1,。


结果:加1产生的增量是


4 x 1 =  4


这个稍微有点复杂。2中把b[3][5] 看成了一个一维数组b[3],但是每个元素大小为5个字节,那么b就表示b[0]的地址了,*b也就是b[0]的值了。b[0]是什么呢,b[3][5]共有3行,每行5个字节,那么b[0]就是第一行数组的数组名了,表示的就是第一个元素的地址。


4、**b是什么?


同上,我们也给它加1,。


结果:加1产生的增量是


   1


其实**b就是首行元素的第一个元素了,即b[0][0]的值。



下面用一张图表示出来:


f6789737-41c5-49bb-a0f9-9c80d271fb2d.jpg





5、可见尽管&b b *b 值相同但其意义却不同。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条