面试题答案
一键面试-
指针运算解释:
- 函数
void func(int (*)[4][5])
接受一个指向int[4][5]
数组的指针。 - 当三维数组
int arr[3][4][5]
传递给该函数时,指针实际上指向arr
的第一个二维数组部分arr[0]
。 - 要访问
arr[1][2][3]
,首先要移动到arr
的第二个二维数组部分,因为数组下标从0开始,所以移动一个int[4][5]
大小的偏移,即*(ptr + 1)
,这里ptr
是函数参数中的指针。 - 然后在这个二维数组
*(ptr + 1)
中,要移动到第三行(下标为2),即*(*(ptr + 1)+2)
。 - 最后在这一行中移动到第四个元素(下标为3),即
*(*(*(ptr + 1)+2)+3)
。
- 函数
-
代码示例:
#include <stdio.h>
void func(int (*ptr)[4][5]){
int value = *(*(*(ptr + 1)+2)+3);
printf("arr[1][2][3]的值为: %d\n", value);
}
int main() {
int arr[3][4][5] = {0};
// 为了演示,给arr[1][2][3]赋一个值
arr[1][2][3]=10;
func(arr);
return 0;
}
上述代码中,func
函数通过指针运算获取并打印 arr[1][2][3]
的值。在 main
函数中,初始化 arr
并给 arr[1][2][3]
赋值为10,然后调用 func
函数。