- C语言编程教程
- C语言——主页
- C语言基础
- C语言——概述
- C语言——特性
- C语言——历史
- C语言——环境搭建
- C语言——程序结构
- C语言——Hello World
- C语言——编译过程
- C语言——注释
- C语言——记号
- C语言——关键字
- C语言——标识符
- C语言——用户输入
- C语言——基本语法
- C语言——数据类型
- C语言——变量
- C语言——整数提升
- C语言——类型转换
- C语言——类型转换
- C语言——布尔值
- C语言中的常量和字面量
- C语言——常量
- C语言——字面量
- C语言——转义字符
- C语言——格式说明符
- C语言中的运算符
- C语言——运算符
- C语言——算数运算符
- C语言——关系运算符
- C语言——逻辑运算符
- C语言——位运算符
- C语言——赋值运算符
- C语言——一元运算符
- C语言——自增和自减运算符
- C语言——三元运算符
- C语言——sizeof运算符
- C语言——运算符优先级
- C语言——其他运算符
- C语言中的决策
- C语言——决策
- C语言——if语句
- C语言——if...else语句
- C语言——嵌套if语句
- C语言——switch语句
- C语言——嵌套switch语句
- C语言中的循环
- C语言——循环
- C语言——while循环
- C语言——for循环
- C语言——do...while循环
- C语言——嵌套循环
- C语言——无限循环
- C语言——break语句
- C语言——continue语句
- C语言——goto语句
- C语言中的函数
- C语言——函数
- C语言——main函数
- C语言——按值调用函数
- C语言——引用调用函数
- C语言——嵌套函数
- C语言——可变参数函数
- C语言——用户自定义函数
- C语言——回调函数
- C语言——return语句
- C语言——递归
- C语言中的作用域规则
- C语言——作用域规则
- C语言——静态变量
- C语言——全局变量
- C语言中的数组
- C语言——数组
- C语言——数组的属性
- C语言——多维数组
- C语言——将数组传递给函数
- C语言——从函数返回数组
- C语言——可变长度数组
- C语言中的指针
- C语言——指针
- C语言——指针和数组
- C语言——指针的应用
- C语言——指针算术
- C语言——指针数组
- C语言——指针指向指针
- C语言——将指针传递给函数
- C语言——从函数返回指针
- C语言——函数指针
- C语言——指向数组的指针
- C语言——指向结构的指针
- C语言——指针链
- C语言——指针与数组
- C语言——字符指针和函数
- C语言——NULL指针
- C语言——void指针
- C语言——悬垂指针
- C语言——取消指针指向
- C语言——近指针,远指针和巨指针
- C语言——指针数组初始化
- C语言——指针与多维数组
- C语言中的字符串
- C语言——字符串
- C语言——字符串数组
- C语言——特殊字符
- C语言结构和联合
- C语言——结构
- C语言——结构和函数
- C语言——结构的数组
- C语言——自引用结构
- C语言——查表
- C语言——点(.)运算符
- C语言——枚举(或enum)
- C语言——结构填充和打包
- C语言——嵌套结构
- C语言——匿名结构和联合
- C语言——联合
- C - 位字段
- C - 类型定义
- C 中的文件处理
- C - 输入与输出
- C - 文件 I/O(文件处理)
- C 预处理器
- C - 预处理器
- C - 指示
- C - 预处理器运算符
- C - 宏
- C - 头文件
- C 中的内存管理
- C - 内存管理
- C - 内存地址
- C - 存储类
- 其他主题
- C - 错误处理
- C - 可变参数
- C - 命令执行
- C - 数学函数
- C - static 关键字
- C - 随机数生成
- C - 命令行参数
- C 编程资源
- C - 问题与解答
- C - 快速指南
- C - 备忘单
- C - 有用资源
- C - 讨论
在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\n", 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() 函数被定义为具有两个参数,即未初始化的数组,未指定任何大小。通过将数组大小除以 int 数据类型 的大小,可以获取 main() 函数中声明的数组的长度。
示例
#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\n", 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\n", *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\n", 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() 函数从指针 arr 中接收 main() 传递过来的数组地址。每次增加该指针时,它都会指向原始数组中的下一个元素。
max() 函数还可以像以下定义中一样访问数组元素,作为普通的带下标的数组 −
int max(int *arr, int length){ int max=*arr; int i; for (i=0; i<length; i++){ printf("arr[%d]: %d\n", 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\t", arr[i]); arr++; } printf("\n"); } }
输出
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