c语言中a+i是地址吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什么还是

2024-11-13 09:32:22
推荐回答(2个)
回答1:

a+i其实就是&a[i],肯定是地址
*(a+i)其实就是a[i],如果a是二给数组的数组名,a[i]就肯定是地址(等同于&a[i][0]),如果a只是一维数组(指针数组除外)的数组名,a[i]就不是地址(原因是:二维数组可以看作是多个一维数组组成,即数组的数组)
*(a+i)+j就是&a[i][j],如果数组a是二维数组那就肯定也是地址啦
a[i][j]则是表示为*(*(a+i)+j)

回答2:

a应该是指的数组名字吧
你首先应该知道数组名字本身就是地址了
a+i是说a的地址向后在移动i个位置
也就是a[i]
a是指的数组的首地址,开头的位置
*(a+i) 也就是*a[i] 也就是a[i]的地址,只是这个地址离首地址偏移了i位置
再加上j 就是 a[i][j]地址
*(a+i)+j是针对二维数组来说的,也可以说是特殊的一维数组。