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

二维数组与指针有关问题

2012-06-29 
二维数组与指针问题在二维数组中,用指针的形式来表示各元素的地址。怎样理解 a[0]与*(a+0)等价,二维数组元

二维数组与指针问题
在二维数组中,用指针的形式来表示各元素的地址。怎样理解 a[0]与*(a+0)等价,二维数组元素a[i][j]可表示成
*(*(a+i)+j), 不理解*(a+i)这里。麻烦大家帮我解决下这个问题,非常感谢!

[解决办法]
[]是下标运算符,A[B]就是*(A+B),
http://wildpointer.net/2010/06/10/c_pointer_array/
上面的文章你看看吧,如果有错误,就留言指出。
[解决办法]
怎样理解 a[0]与*(a+0)等价,二维数组元素a[i][j]可表示成
*(*(a+i)+j), 不理解*(a+i)这里。

a是数组名,是一个指针常量,指向的是数组的首地址~~~所以a[0]<=>*(a+0)..[]运算符就是取偏移量,而*可以理解为解引用~就是取地址上的值~~
二维数组则有首地址,行地址,行首地址的分别~~
a[i][j]~~不用语言会有不同的解释,大部分都是行优先~~~如果是列优先的语言,上面那句话改下就行了~~
a是这个数组的首地址,&(a[i][0])是这个数组第i行的首地址,a[i]是这个数组的第i行的行地址~~其实后两者是一样的~
按行优先开始~~首先取行地址的偏移量 a[i]<=>*(a+i),然后在这个地址基础上再加上列地址的偏移量,记住
a[i]是第i行的行地址,不是“值”~~&(a[i][j])<=>*(a+i)+j,地址取到了~~现在进行解引用~~
*(&(a[i][j]))<=>a[i][j]<=>*(*(a+i)+j)~~
不知道这样讲解你会不会明白点~~

热点排行