C语言教程-在C语言中传递数组给函数

在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