使用双指针访问2D数组元素

Wal*_*ter 2 c arrays pointers

最近我接受了采访C.面试官让我解释如何在2D array使用中访问特定元素double pointer.我给出了答案*(*(a+i)+j),其中a是双指针,ij数和列数.后来他让我用一个例子来解释.我很困惑,*(a+i)因为它给出了值而不是地址,并添加给j了一些垃圾值.任何人都可以解释.

rod*_*igo 6

请记住,在一维数组中a[i]等于*(a+i).C中没有2D数组,只有数组数组.

所以a[i][j]实际上是等于*(*(a+i)+j).

如果类型aint**,那么类型(a+i)仍然是int**,你需要取消引用它.类型*(a+i)IS int*和的类型*(*(a+i)+j)int.

关于面试问题,无论a是双指针,你都应该使用[]表示法.替代方案太麻烦了:

int **a = ...;
int x = a[i][j];
Run Code Online (Sandbox Code Playgroud)