MST

星途 面试题库

面试题:C语言中一维数组名作为函数参数时与指针的关系

在C语言中,定义一个函数`void func(int arr[])`,当在主函数中传递一个一维数组`int a[10]`给这个函数时,`arr`在函数内部实际是什么?请解释函数内部对`arr`的操作和对原数组`a`的影响,并举例说明。
28.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. arr在函数内部实际是什么

    • 在函数void func(int arr[])中,当传递一维数组int a[10]给这个函数时,arr实际上是一个指针,确切地说是指向数组a首元素的指针,其类型为int *。在C语言中,数组名在作为函数参数传递时,会自动退化为指针。
  2. 函数内部对arr的操作和对原数组a的影响

    • 由于arr是指向原数组a首元素的指针,所以对arr所指向内容的修改,会直接影响原数组a。例如,如果在函数内部通过arr改变某个元素的值,原数组a中对应位置的元素值也会改变。
    • 但是,对arr指针本身的操作(比如重新赋值使其指向其他地方),不会改变原数组a的地址。
  3. 举例说明

#include <stdio.h>

void func(int arr[]) {
    // 修改数组第一个元素的值
    arr[0] = 100; 
    // 这里arr是指针,也可以通过指针运算来修改
    *(arr + 1) = 200; 
}

int main() {
    int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    func(a);
    for (int i = 0; i < 10; i++) {
        printf("%d ", a[i]);
    }
    return 0;
}

在上述代码中,func函数接收数组a并修改了其前两个元素的值。在main函数中调用func(a)后,原数组a的前两个元素分别变为100和200 。