面试题答案
一键面试- 获取
arr[1][2]
的值:- 指针表达式为
*(ptr + 1 * 4 + 2)
。 - 解释:在二维数组
arr[3][4]
中,数组在内存中是按行顺序存储的。ptr
指向arr[0][0]
。要访问arr[i][j]
,首先要跳过前面i
行,每行有4
个元素(因为二维数组第二维的大小是4
),所以先移动i * 4
个元素的位置,然后再移动j
个元素位置。这里i = 1
,j = 2
,所以指针移动的总偏移量为1 * 4 + 2
,然后通过*
解引用操作符获取该位置的值。
- 指针表达式为
- 遍历整个二维数组:
#include <stdio.h>
int main() {
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int *ptr = &arr[0][0];
for (int i = 0; i < 3 * 4; i++) {
printf("%d ", *(ptr + i));
if ((i + 1) % 4 == 0) {
printf("\n");
}
}
return 0;
}
在代码中,通过 for
循环,从 i = 0
到 i < 3 * 4
(因为二维数组总共有 3 * 4 = 12
个元素),每次循环指针 ptr
移动一个元素位置(ptr + i
),并通过 *
解引用操作符获取并打印该位置的值。当 (i + 1) % 4 == 0
时,说明一行已经遍历完,打印换行符。