面试题答案
一键面试- 二维数组
int arr[3][4]
在内存中的存储方式:- 在C语言中,二维数组
int arr[3][4]
按行优先顺序存储在内存中。即先存储第一行的4个元素,接着存储第二行的4个元素,最后存储第三行的4个元素。整个数组在内存中是连续存储的。 - 例如,
arr[0][0]
是数组的第一个元素,紧跟其后的是arr[0][1]
、arr[0][2]
、arr[0][3]
,然后是arr[1][0]
、arr[1][1]
等。
- 在C语言中,二维数组
- 函数接收并通过指针操作数组元素:
- 当将
arr
作为指针传递给函数时,由于二维数组名本质上是指向其首元素的指针,这里首元素是一个包含4个int
类型元素的一维数组,所以函数参数可以声明为int (*ptr)[4]
(这里4
是二维数组第二维的大小)。这样ptr
就可以正确指向二维数组的每一行,通过指针偏移操作数组元素。
- 当将
printArray
函数实现:
#include <stdio.h>
void printArray(int *ptr, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
// 通过指针偏移获取元素
printf("%d ", *(ptr + i * cols + j));
}
printf("\n");
}
}
你可以使用以下方式调用这个函数:
int main() {
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printArray((int *)arr, 3, 4);
return 0;
}
在printArray
函数中,ptr
是指向int
类型的指针,通过i * cols + j
的偏移量来正确访问二维数组的每一个元素。在main
函数中,将二维数组arr
强制转换为int *
类型传递给printArray
函数,并传入数组的行数和列数。