MST

星途 面试题库

面试题:C语言指针在函数参数传递中的应用

编写一个C函数,该函数接收一个整数数组和数组的大小作为参数,使用指针操作在函数内部修改数组元素的值,使其翻倍。说明为什么使用指针而不是直接传递数组名来实现此功能,以及指针传递在这种场景下的优势和可能存在的风险。
16.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

void doubleArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        *(arr + i) *= 2;
    }
}

使用指针而不是直接传递数组名的原因

在C语言中,当函数参数为数组时,实际上传递的是数组首元素的指针。所以,直接传递数组名本质上也是传递指针。使用指针操作数组元素更清晰地体现了这一底层机制,并且指针操作更灵活,可以进行算术运算来访问数组不同位置的元素。

指针传递在这种场景下的优势

  1. 高效:避免了数组的整体拷贝,只传递了一个指针(通常为4字节或8字节,取决于系统架构),如果数组很大,能极大减少内存开销和传递时间。
  2. 灵活性:指针可以进行算术运算,如 arr + i 来访问数组的不同元素,操作更加直接和灵活。

指针传递可能存在的风险

  1. 空指针风险:如果传入的指针是 NULL,对其进行解引用操作(如 *arr)会导致程序崩溃,出现段错误。
  2. 越界访问风险:指针操作数组时,如果没有正确检查边界,如 *(arr + size)size 超过数组实际大小),会访问到未分配的内存,导致未定义行为。
  3. 内存管理问题:如果在函数外部动态分配了数组内存,并传递指针到函数中,如果函数对指针进行了修改(如 arr = arr + 1),可能导致函数外部对该内存的访问混乱,并且可能造成内存泄漏(如果没有正确释放内存)。