最近我接受了采访C
.面试官让我解释如何在2D array
使用中访问特定元素double pointer
.我给出了答案*(*(a+i)+j)
,其中a
是双指针,i
行j
数和列数.后来他让我用一个例子来解释.我很困惑,*(a+i)
因为它给出了值而不是地址,并添加给j
了一些垃圾值.任何人都可以解释.
请记住,在一维数组中a[i]
等于*(a+i)
.C中没有2D数组,只有数组数组.
所以a[i][j]
实际上是等于*(*(a+i)+j)
.
如果类型a
是int**
,那么类型(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)