MST

星途 面试题库

面试题:C语言指针运算与内存管理结合

编写一个函数,该函数接受一个指向动态分配的一维整数数组的指针和数组元素个数n,通过指针运算将数组元素逆序排列,并且在函数结束后正确释放分配的内存。要求详细说明指针运算如何实现逆序,以及内存管理的关键要点。
46.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdlib.h>

void reverseAndFree(int *arr, int n) {
    // 指针运算实现逆序
    int *start = arr;
    int *end = arr + n - 1;
    while (start < end) {
        int temp = *start;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }

    // 内存管理关键要点:释放动态分配的内存
    free(arr);
}

int main() {
    int n = 5;
    int *arr = (int *)malloc(n * sizeof(int));
    if (arr == NULL) {
        perror("malloc");
        return 1;
    }
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }

    reverseAndFree(arr, n);
    return 0;
}

指针运算实现逆序说明

  1. 定义指针:使用int *start = arr指向数组的起始位置,int *end = arr + n - 1指向数组的末尾位置。
  2. 交换元素:通过while (start < end)循环,在startend相遇之前,交换startend所指向的元素。每次交换后,start指针向后移动一位(start++),end指针向前移动一位(end--)。这样逐步将数组元素逆序排列。

内存管理关键要点

  1. 动态内存分配:在main函数中,使用malloc分配了一块大小为n * sizeof(int)的内存空间,并将返回的指针赋值给arr。如果malloc失败(返回NULL),需要进行错误处理,这里使用perror输出错误信息并返回。
  2. 内存释放:在reverseAndFree函数中,当数组元素逆序排列完成后,使用free(arr)释放之前动态分配的内存。这一步至关重要,避免内存泄漏。确保在程序不再需要这块动态分配的内存时,及时释放它。