MST

星途 面试题库

面试题:C语言数组与指针:复杂指针运算错误排查

有如下C语言代码,函数 `modifyArray` 旨在修改二维数组特定位置的值,但运行结果不正确。请找出代码中数组与指针相关的错误,并改正。 ```c #include <stdio.h> void modifyArray(int *arr, int row, int col, int value) { arr[row * col + 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; } ```
45.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 错误分析
    • modifyArray函数中,arr被声明为int *类型,而main函数中传递的matrix是二维数组。虽然在C语言中二维数组在传参时会退化为指针,但这里的指针类型应该是int (*)[3],而不是int *。同时,计算数组元素位置的公式也有误,应该是arr[row * 3 + col](这里假设列数为3),原代码中arr[row * col + col]计算错误。
  2. 改正后的代码
#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;
}
  1. 修改点说明
    • modifyArray函数的参数arr改为int (*)[3]类型,这样可以正确指向二维数组。
    • modifyArray函数中,使用arr[row][col]直接访问二维数组对应位置的元素,避免了错误的计算。