多维数组对于学习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可以说明问题(对地址加1和对一个普通的变量加1有着不同的意义。对地址加1,增量是给存储单元占用的字节数)
结果:&b表示整个b数组的地址,加1产生的增量是:
4 x 1 x 5 x 3 = 60 (4为int 变量占用的字节数 )
同上,我们也给它加1,。
结果:加1产生的增量是
4 x 1 x 5= 20
这里把b[3][5] 看成了一个一维数组b[3],但是每个元素大小为5个字节。
同上,我们也给它加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]就是第一行数组的数组名了,表示的就是第一个元素的地址。
同上,我们也给它加1,。
结果:加1产生的增量是
1
其实**b就是首行元素的第一个元素了,即b[0][0]的值。
下面用一张图表示出来:
5、可见尽管&b b *b 值相同但其意义却不同。
文章评论(0条评论)
登录后参与讨论