为什么在使用指针访问二维数组元素时有两个星号?

Jun*_*ter 1 c pointers multidimensional-array

在C中,当我们访问a[i][j]使用指针,为什么我们还需要第二次**(*(a + i) + j)?使用printf()我看到a + i*(a + i)打印相同的值.

Joh*_*itb 9

a + i是指向i'子阵列的指针.如果你取消引用它,你得到一个左i子阵列的左值,它会衰减到指向该数组的第一个元素的指针.数组的第一个元素的地址和它的数组的地址是相同的.

需要取消引用以+ j使用正确的元素字节宽度进行计算.如果你不会取消引用,那么取而代之的是T*你会得到一个T(*)[J]你添加的指针j,它与i指向内存的进展(a + i + j)相反(前进sizeof(T[J])而不是sizeof(T)).