有二位数组a[n][m] 对于指针问题 *(*(a+i)+j) 与 a[i][j] 为什么等价 (i ,j在n,m范围内)?

对于*号不是取值吗?a是a[0][0]的地址,那么a+i也是一个地址,则*(a+i)不是值吗?然后再加j再用*符号干什么?书上只有*(*(a+i)+j)与a[i][j]等... 对于*号不是取值吗?a是a[0][0]的地址,那么a+i也是一个地址 ,则*(a+i)不是值吗? 然后再加 j 再用 *符号干什么? 书上只有*(*(a+i)+j) 与 a[i][j] 等价,但我不理解!望大神解答 展开
 我来答
lyqf365
2012-09-21 · TA获得超过1185个赞
知道小有建树答主
回答量:1291
采纳率:100%
帮助的人:821万
展开全部
首先,二维数组实质上是一段连续空间,而数组名也仅仅是一个记号,它并不是指针.
但它可以当作指针使用.这是编译器语法解析时的处理.
真正的指针应该是一个存有地址的变量.所以指针和数组名是不同的.

a[n][m]这个二维数组.是一个n*m的空间.它可以当作一个二级指针在基作用域内使用.
二级指针是一个指向指针的指针.
追问
*(a+i)与a[i]等价  是怎么理解的?
追答
这个要看a的类型了
如果 a数组里最终数据是 int类型的的
int a[10];
a[3]和 *(a+3)是等价的
a作为数组名,可以当作指针用.其值为数组开始的地址.其实写法可以是 &a,但是为了简单,C标准中规定在a是数组的时候,取地址符号省略了.
一个指针进行下标运算的话.
int *p = a;
p[3] 就是p中存的地址加上 3*sizeof(int),这个地址作为超始后的sizeof(int)的内存段,这段内存中的数值.
如果是 int a[10][10]
那么 a[3]就是 a的首地址加上 3*sizeof(int [10]),的地址.
周生008
2012-09-21 · TA获得超过1222个赞
知道小有建树答主
回答量:1329
采纳率:0%
帮助的人:665万
展开全部
*(a+i)取出来的是a[i]的值,是个指针,再取值就得到a[i][j]的值了
指针也有值啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式