c语言中a+i是地址吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什么还是
地址?*(a+i)=a+i吗?,这不可能啊,还有,*(a+i)+j为什么也是地址?(a+i)+j是什么?求解。...
地址?*(a+i)=a+i吗?,这不可能啊,还有,*(a+i)+j为什么也是地址?(a+i)+j是什么?求解。
展开
2个回答
展开全部
追问
还是不明白,a+i是指针那么二位数组a[i]是列指针那么*(a+i)为什么还等于a[i]?不应该是a+i等于a[i]吗?a+i和*(a+i)指针值为什么相同?为什么*(a+i)就是列指针而不是间接访问a+i?
追答
a[i]是行地址,也就相当于一维数组的数组名(数组名就是地址,因此它就是这一数据行的首地址)
这个地址也是存放在内存中的,列地址的集合就是另一个一维数组,即行数组,它是一个指针数组
a+i的值和*(a+i)的值不同,前者是&a[i],后者是&a[i][0],虽然都是地址,但却是两个不同的地址
你如果了解二给数组的存储结构,就会知道,它实际上只是一个一维指针数组(行数组,是一个常量指针数组,用来存储每行第0列的地址即行首地址),而这个数组里面每一个元素又是一个一维数组(准确地说就是数组名),这样的一维数组里面存储的才不是地址,而是具体的数值了
2016-05-05
展开全部
a应该是指的数组名字吧
你首先应该知道数组名字本身就是地址了
a+i是说a的地址向后在移动i个位置
也就是a[i]
a是指的数组的首地址,开头的位置
*(a+i) 也就是*a[i] 也就是a[i]的地址,只是这个地址离首地址偏移了i位置
再加上j 就是 a[i][j]地址
*(a+i)+j是针对二维数组来说的,也可以说是特殊的一维数组。
你首先应该知道数组名字本身就是地址了
a+i是说a的地址向后在移动i个位置
也就是a[i]
a是指的数组的首地址,开头的位置
*(a+i) 也就是*a[i] 也就是a[i]的地址,只是这个地址离首地址偏移了i位置
再加上j 就是 a[i][j]地址
*(a+i)+j是针对二维数组来说的,也可以说是特殊的一维数组。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询