在C语言中,有许多常见的问题需要将同一类型的多个变量传递给函数。例如,考虑一个对10个元素按升序排序的函数。这样的函数需要从主函数传递10个数字作为实际参数。在这种情况下,我们可以声明和初始化一个数组,并将其作为参数传递给函数。这将解决所有的复杂性,因为该函数现在可以处理任意数量的值。

正如我们所知,数组名包含第一个元素的地址。在这里,我们需要注意的是,我们只需要将数组的名称传递给接受数组的函数。作为形式参数定义的数组将自动引用由数组名指定的数组。

考虑以下语法来将数组传递给函数。

函数名(数组名); //传递数组

声明接受数组作为参数的函数的方法

有三种方法可以声明接受数组作为参数的函数。

第一种方法:

返回类型 函数名(类型 数组名[])

使用空白的下标符号[]是最常用的技术。

第二种方法:

返回类型 函数名(类型 数组名[SIZE])

可以选择在下标符号[]中定义大小。

第三种方法:

返回类型 函数名(类型 *数组名)

也可以使用指针的概念。我们将在指针章节中学习它。

C语言传递数组给函数的示例

cCopy code
#include<stdio.h>
int minarray(int arr[], int size) {
    int min = arr[0];
    int i = 0;
    for (i = 1; i < size; i++) {
        if (min > arr[i]) {
            min = arr[i];
        }
    }
    return min;
}

int main() {
    int i = 0, min = 0;
    int numbers[] = {4, 5, 7, 3, 8, 9}; //声明数组
    min = minarray(numbers, 6); //传递带有大小的数组
    printf("最小的数是:%d\n", min);
    return 0;
}

输出

Copy code
最小的数是:3

C函数对数组进行排序

#include<stdio.h>
void Bubble_Sort(int arr[]);
void main() {
    int arr[10] = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
    Bubble_Sort(arr);
}
void Bubble_Sort(int a[]) //数组a[]指向arr
{
    int i, j, temp;
    for (i = 0; i < 10; i++) {
        for (j = i + 1; j < 10; j++) {
            if (a[j] < a[i]) {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    printf("打印排序后的元素列表...\n");
    for (i = 0; i < 10; i++) {
        printf("%d\n", a[i]);
    }
}

输出

打印排序后的元素列表...
7
9
10
12
23
23
34
44
78
101

从函数返回数组

正如我们所知,一个函数不能返回多于一个值。然而,如果我们尝试编写return语句作为return a, b, c;来返回三个值(a、b、c),函数将返回最后一个提到的值,即在我们的例子中是c。在某些问题中,我们可能需要从函数返回多个值。在这种情况下,可以从函数返回一个数组。

返回一个数组类似于将数组传递给函数。函数返回数组的名称。为了将函数返回的数组存储起来,我们可以定义一个指针,它指向该数组。我们可以通过增加指针来遍历数组,因为指针最初指向数组的基地址。考虑以下包含返回排序数组的函数的示例。

#include<stdio.h>
int* Bubble_Sort(int arr[]);
void main() {
    int arr[10] = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
    int *p = Bubble_Sort(arr), i;
    printf("打印排序后的元素...\n");
    for (i = 0; i < 10; i++) {
        printf("%d\n", *(p + i));
    }
}
int* Bubble_Sort(int a[]) //数组a[]指向arr
{
    int i, j, temp;
    for (i = 0; i < 10; i++) {
        for (j = i + 1; j < 10; j++) {
            if (a[j] < a[i]) {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    return a;
}

输出

打印排序后的元素...
7
9
10
12
23
23
34
44
78
101

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想