MST

星途 面试题库

面试题:C语言复杂指针类型的初始化及内存管理

假设有一个二维数组`int arr[3][4]`,请通过指针初始化一个指向该二维数组首元素的指针,并编写代码实现对数组元素的遍历和修改。同时,说明在此过程中可能涉及的内存管理问题及如何避免内存泄漏。
38.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

int main() {
    int arr[3][4];
    int (*ptr)[4] = arr; // 初始化指向二维数组首元素的指针,这里指针指向一个包含4个int的数组

    // 遍历并修改数组元素
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            *(*(ptr + i) + j) = i * 4 + j; // 修改元素值
            printf("%d ", *(*(ptr + i) + j)); // 输出元素值
        }
        printf("\n");
    }

    // 内存管理:
    // 在此例中,数组arr是在栈上分配的内存,当函数结束时,这块内存会自动释放,不会产生内存泄漏。
    // 如果数组是通过动态内存分配(如malloc等函数)得到的,在使用完后需要使用相应的释放函数(如free)来释放内存,以避免内存泄漏。
    // 例如,如果是这样分配内存:
    // int **dynamicArr = (int **)malloc(3 * sizeof(int *));
    // for (int i = 0; i < 3; i++) {
    //     dynamicArr[i] = (int *)malloc(4 * sizeof(int));
    // }
    // 使用完后释放内存:
    // for (int i = 0; i < 3; i++) {
    //     free(dynamicArr[i]);
    // }
    // free(dynamicArr);
    return 0;
}