首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于多维数组跟指针,求指教

2012-09-28 
关于多维数组和指针,求指教最近在学C,看的是谭浩强的C程序设计有这样一段描述想不明白了~a是二维数组,a[0

关于多维数组和指针,求指教
最近在学C,看的是谭浩强的C程序设计

有这样一段描述想不明白了~

"a是二维数组,a[0]+1和*(a+0)+1等价于&a[0][1]"

*(a+0)+1等价于&a[0][1] 这两个怎么会等价啊,求大神指点.

[解决办法]
a-----指向二维数组首地址
*a----指向第一个元素
*a+1----指向第二个元素,即&a[0][1]
[解决办法]
这个在C和指针上描述的比较清楚,在156页。假定你定义的数组为整型

下标引用实际上只是间接访问表达式的一种伪装形式。a是指向一个有N个元素的数组指针,
*(a+0)是一个指向整型值的指针,所以表达式加1后这个值会根据整型的长度进行调整,整个表达式的结果还是一个指针。
[解决办法]
x[y]等价于*(x+y)这个懂吧?把a[0]看作一个整体,a[0][1]不就是*(a[0]+1)么,*与&作用相反被抵消,剩下来的不就是a[0]+1么!
[解决办法]
其实下标访问和指针访问是等价的,但是下标更好理解而已!
其实有个公式来的我记的是:a[i]=*(a+i)=*(i+a)=i[a];
a[0]+1;//a[0]表示数组a的第1行的行地址;所以a[0]+1即是指向二维数组a的第1行的2个元素;
*(a+0)+1;//*(a+0)=*a=a[0];所以和同上;
&a[0][1];//即是取二维数组a的第1行的2个元素的地址;
[解决办法]
二维数组可以看成有行和列组成的行列式,当然在内存中这些数据并不是二维的,而是线性存储的。那么:
 a------>表示二维数组首地址
*a------>表示第一行的首地址
*a+1---->表示第一行的第二个元素的地址;也可以表示:*(a+0)+1换言之,指向第一行的首地址的*(a+0)然后偏移一个元素长度+1,即&a[0][1]

热点排行