MST

星途 面试题库

面试题:C语言函数参数传递之数组传递

在C语言中,当一个函数的参数是数组时,实际传递的是什么?请举例说明如何在函数中修改传递进来的数组元素值,并解释这种传递方式的原理。
14.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

在C语言中,当一个函数的参数是数组时,实际传递的是数组首元素的地址,这是一种传址调用。

示例代码如下:

#include <stdio.h>

// 函数声明
void modifyArray(int arr[], int size);

int main() {
    int myArray[] = {1, 2, 3, 4, 5};
    int size = sizeof(myArray) / sizeof(myArray[0]);

    printf("修改前数组: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", myArray[i]);
    }
    printf("\n");

    modifyArray(myArray, size);

    printf("修改后数组: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", myArray[i]);
    }
    printf("\n");

    return 0;
}

// 函数定义
void modifyArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        arr[i] *= 2; // 修改数组元素值
    }
}

原理:

  1. 传址调用:C语言在函数参数传递数组时,传递的是数组首元素的地址。这意味着函数内部对数组的操作,实际上是对调用函数中数组的操作,因为它们指向同一块内存区域。
  2. 数组名作为指针:在函数参数列表中,int arr[]int *arr 本质上是一样的,都表示一个指向 int 类型的指针。所以在函数内部,可以像操作指针一样来访问和修改数组元素。
  3. 内存共享:由于函数内外共享同一块内存,函数对数组元素的修改会直接反映在调用函数的数组上。