在 C 语言中将数组作为函数参数传递
如果要将数组传递给函数,可以使用按值调用或按引用调用方法。在按值调用方法中,函数的参数应该是一个已初始化的数组,或者是一个大小与要传递的数组大小相等的固定数组。在引用调用方法中,函数参数是指向数组的指针。
通过值调用方法传递数组
在以下代码中,main() 函数包含一个整数数组 数组。用户定义函数 average() 通过将数组传递给该函数进行调用。average() 函数接收该数组,并使用 for 循环 将其元素相加。它返回一个浮点值,表示数组中数字的平均值。
示例
#include <stdio.h> float average(int arr[5]); int main(){ int arr[] = {10, 34, 21, 78, 5}; float avg = average(arr); printf("average: %f", avg); } float average(int arr[5]){ int sum=0; int i; for (i=0; i<5; i++){ printf("arr[%d]: %d ", i, arr[i]); sum+=arr[i]; } return (float)sum/5; }
输出
arr[0]: 10 arr[1]: 34 arr[2]: 21 arr[3]: 78 arr[4]: 5 average: 29.600000
在以下变体中,average() 函数定义有两个参数,一个未初始化且未指定大小的数组。main() 函数中声明的数组长度是通过将数组大小除以 int 数据类型的大小得出的。
示例
#include <stdio.h> float average(int arr[], int length); int main(){ int arr[] = {10, 34, 21, 78, 5}; int length = sizeof(arr)/sizeof(int); float avg = average(arr, length); printf("average: %f", avg); } float average(int arr[], int length){ int sum=0; int i; for (i=0; i<length; i++){ printf("arr[%d]: %d ", i, arr[i]); sum+=arr[i]; } return (float)sum/length; }
输出
arr[0]: 10 arr[1]: 34 arr[2]: 21 arr[3]: 78 arr[4]: 5 average: 29.600000
通过引用调用传递数组
要使用此方法,我们应该理解数组中的元素属于相似的数据类型,存储在连续的内存位置,并且数组大小取决于数据类型。此外,第 0 个元素的地址是指向数组的指针。
在以下示例中 -
int a[5] = {1,2,3,4,5};
数组的大小为 20 字节(每个 int 占 4 字节)
int *x = a;
这里 x 是指向数组的指针。它指向第 0 个元素。如果指针加 1,则指向下一个元素。
示例
#include <stdio.h> int main() { int a[] = {1,2,3,4,5}; int *x = a, i; for (i=0; i<5; i++){ printf("%d ", *x); x++; } return 0; }
输出
1 2 3 4 5
让我们利用此特性通过引用传递数组。在 main() 函数中,我们声明一个数组并将其地址传递给 max() 函数。max() 函数使用指针遍历该数组,并将数组中的最大数字返回给 main() 函数。
示例
#include <stdio.h> int max(int *arr, int length); int main(){ int arr[] = {10, 34, 21, 78, 5}; int length = sizeof(arr)/sizeof(int); int maxnum = max(arr, length); printf("max: %d", maxnum); } int max(int *arr, int length){ int max=*arr; int i; for (i=0; i<length; i++){ printf("arr[%d]: %d ", i, (*arr)); if ((*arr)>max) max = (*arr); arr++; } return max; }
输出
arr[0]: 10 arr[1]: 34 arr[2]: 21 arr[3]: 78 arr[4]: 5 max: 78
max() 函数从 main() 函数中获取数组的地址,并将其存储在指针 arr 中。每次递增时,它都会指向原始数组中的下一个元素。
max() 函数也可以像普通下标数组一样访问数组元素,定义如下:
int max(int *arr, int length){ int max=*arr; int i; for (i=0; i<length; i++){ printf("arr[%d]: %d ", i, arr[i]); if (arr[i]>max) max = arr[i]; } return max; }
将二维数组传递给函数
您也可以将二维数组的指针传递给函数。在函数内部,使用嵌套 for 循环结构遍历二维数组。
示例
#include <stdio.h> int twoDarr(int *arr); int main(){ int arr[][3]= {10, 34, 21, 78, 5, 25}; twoDarr(*arr); } int twoDarr(int *arr){ int max=*arr; int i, j; for (i=0; i<2; i++){ for (j=0; j<3; j++){ printf("%d ", arr[i]); arr++; } printf(" "); } }
输出
10 34 21 5 25 16
比较字符串长度的函数
在下面的程序中,两个字符串被传递给 compare() 函数。在 C 语言中,字符串是一个 char 数据类型的数组。我们使用 strlen() 函数 来计算字符串的长度,即字符串中字符的数量。
示例
#include <stdio.h> #include <string.h> int compare( char *, char *); int main() { char a[] = "BAT"; char b[] = "BALL"; int ret = compare(a, b); return 0; } int compare (char *x, char *y){ int val; if (strlen(x)>strlen(y)){ printf("length of string a is greater than or equal to length of string b"); } else{ printf("length of string a is less than length of string b"); } }
输出
length of string a is less than length of string b