面试题答案
一键面试- 错误分析:
- 在
modifyArray
函数中,arr
被声明为int *
类型,而main
函数中传递的matrix
是二维数组。虽然在C语言中二维数组在传参时会退化为指针,但这里的指针类型应该是int (*)[3]
,而不是int *
。同时,计算数组元素位置的公式也有误,应该是arr[row * 3 + col]
(这里假设列数为3),原代码中arr[row * col + col]
计算错误。
- 在
- 改正后的代码:
#include <stdio.h>
void modifyArray(int (*arr)[3], int row, int col, int value) {
arr[row][col] = value;
}
int main() {
int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
modifyArray(matrix, 1, 1, 100);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
- 修改点说明:
modifyArray
函数的参数arr
改为int (*)[3]
类型,这样可以正确指向二维数组。- 在
modifyArray
函数中,使用arr[row][col]
直接访问二维数组对应位置的元素,避免了错误的计算。