MST
星途 面试题库

面试题:C语言一维数组名在函数参数传递中的表现

在C语言中,当一维数组作为函数参数传递时,数组名发生了什么本质变化?请举例说明如何在函数中正确处理传递进来的一维数组,以获取其元素个数。
26.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 数组名本质变化
    • 在C语言中,当一维数组作为函数参数传递时,数组名会退化为指向数组首元素的指针。这意味着它失去了原本作为数组时所具有的长度等信息。例如:
    void func(int arr[]) {
        // 这里的arr实际上是int *类型
    }
    int main() {
        int a[5] = {1, 2, 3, 4, 5};
        func(a);
        return 0;
    }
    
  2. 在函数中正确处理传递进来的一维数组以获取元素个数的方法
    • 方法一:传递数组长度作为额外参数
    void printArray(int arr[], int len) {
        for (int i = 0; i < len; i++) {
            printf("%d ", arr[i]);
        }
        printf("\n");
    }
    int main() {
        int a[5] = {1, 2, 3, 4, 5};
        printArray(a, sizeof(a)/sizeof(a[0]));
        return 0;
    }
    
    • 方法二:使用结构体封装数组和长度
    typedef struct {
        int data[100];
        int length;
    } ArrayStruct;
    void printArray(ArrayStruct arr) {
        for (int i = 0; i < arr.length; i++) {
            printf("%d ", arr.data[i]);
        }
        printf("\n");
    }
    int main() {
        ArrayStruct a = {{1, 2, 3, 4, 5}, 5};
        printArray(a);
        return 0;
    }