面试题答案
一键面试#include <stdio.h>
int main() {
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int **ptr;
int i, j;
// 将二维数组首地址赋给指针的指针
ptr = (int **)arr;
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
printf("%d ", *((ptr + i * 4) + j));
}
printf("\n");
}
return 0;
}
在上述代码中:
- 定义了二维数组
arr
并初始化。 - 定义了一个指向指针的指针
ptr
。 - 通过强制类型转换将
arr
的首地址赋给ptr
。 - 使用两层循环,通过指针运算
*((ptr + i * 4) + j)
来访问并打印二维数组的每个元素。
需要注意的是,在C语言中,二维数组本质上是按行存储的一维数组,这里通过指针的指针模拟了对二维数组的访问,i * 4
是为了正确跨越每行的元素个数。