第1个回答 2014-01-06
首先,a[i]不是表示行地址,而是a+i表示行地址,而a[i]等价于*(a+i),它表示的是第i行的列地址,或者说是第i行的首个元素的地址&a[i][0]。因此a[i]+j表示的是第i行第j列元素的地址,如果在这个地址上再加星号则表示该元素,即*(a[i]+j)等价于a[i][j],实际上由于a[i]等价于*(a+i),所以*(a[i]+j)等价于
*(*(a+i)+j)这也就是我们所常见的元素a[i][j]的表示形式。
至于第二个问题,a表示的是数组a的起始地址,而a+i*h+j表示的不是数组的元素a[i][j]的地址,而是这个数组的第i*h+j行的首地址,如果有地方说这个值表示数组的第i行第j列的元素地址的话,这是错误的,实际上a[0]+i*h+j才表示数组a的元素a[i][j]的地址(如果这个数组的每一行有h个元素的话)。对于这个问题如果你非要这样去理解,那是考虑到a的值和a[0]的值是相同的,也就是同一个存储单元的地址,但是由于这两个的类型完全不一样,所以这种表达方式是错误的。