c语言编程笔录

首页 > C语言 > c语言

c语言

C语言之把数组名作函数参数的四种情况说明

更新时间:2023-08-09

前言

在C语言中,数组名作为函数参数有四种情况。在下面的解答中,我将逐一介绍每种情况,并提供相应的代码示例。这将帮助您更好地理解数组名作为函数参数的用法和规范。

情况一:数组名作为形式参数

当数组名作为形式参数传递给函数时,实际上是将数组的地址传递给了函数。这意味着,通过形式参数对数组所做的任何修改都将影响到原始数组。以下是一个简单的示例:

#include 

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

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

    modifyArray(array, size);

    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }

    return 0;
}

在这个示例中,modifyArray函数接受一个整型数组和数组的大小作为参数。在函数内部,数组的每个元素都被乘以2。在主函数中,我们打印出了修改后的数组,结果为2 4 6 8 10。

情况二:数组名作为实际参数

如果在函数调用时将数组名作为实际参数传递给函数,那么实际传递给函数的只是数组的副本,而不是数组本身。这意味着,在函数内部对数组的修改不会影响到原始数组。以下是一个示例:

#include 

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

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

    printArray(array, size);

    return 0;
}

在这个示例中,printArray函数接受一个整型数组和数组的大小作为参数。在函数内部,我们只是简单地打印出了数组的元素。在主函数中,我们调用了printArray函数,并打印出了原始数组,结果为1 2 3 4 5。

情况三:数组名作为函数的返回值

数组名也可以作为函数的返回值。在C语言中,不能直接返回一个完整的数组,但可以通过返回数组的指针来实现类似的功能。以下是一个示例:

#include 

int* createArray(int size) {
    int* arr = (int*)malloc(size * sizeof(int));
    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }
    
    return arr;
}

int main() {
    int size = 5;
    int* array = createArray(size);

    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }

    free(array);

    return 0;
}

在这个示例中,createArray函数动态分配了一个大小为size的整型数组,并对数组进行初始化。然后,函数返回了数组的指针。在主函数中,我们接收了这个返回的指针,并打印出了数组的元素,结果为1 2 3 4 5。需要注意的是,在使用完返回的数组指针后,我们需要使用free函数来释放内存。

情况四:将数组名传递给指向数组的指针参数

另一种常见的情况是将数组名作为指向数组的指针参数传递给函数。这与情况一中将数组名作为形式参数传递给函数的情况非常类似。以下是一个示例:

#include 

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

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

    modifyArray(array, size);

    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }

    return 0;
}

在这个示例中,modifyArray函数接受一个指向整型数组的指针和数组的大小作为参数。函数内部的操作与情况一相同。在主函数中,我们调用了modifyArray函数,并打印出了修改后的数组,结果为2 4 6 8 10。

总结

数组名作为函数参数在C语言中有四种情况:

  1. 数组名作为形式参数时,实际传递给函数的是数组的地址。
  2. 将数组名作为实际参数传递给函数时,实际传递的是数组的副本。
  3. 数组名可以作为函数的返回值,通过返回数组的指针来实现。
  4. 将数组名传递给指向数组的指针参数时,与情况一类似,实际传递的是数组的地址。

通过对这四种情况的理解和应用,您可以更好地在C语言中使用数组和函数。