向函数传递数组
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 29 课,共 63 课。
在 C 中将数组传递给函数时,幕后会发生一件有趣的事。数组本身并不会真正复制到函数中。相反,传递的是指向数组第一个元素的指针。
这意味着,当你编写类似 int arr[] 或 int *arr 这样的函数参数时,两者是等价的,它们都表示指向数组第一个元素的指针。函数会接收数组起始位置的内存地址,从而可以直接访问原数组中的数据。
void printArray(int arr[], int size) {
// arr 实际上是指向第一个元素的指针
// 这个函数可以访问和修改原始数组
}由于函数使用的是原始数组的内存位置,而不是副本,因此在函数内部所做的任何更改都会影响原始数组。这与传递单个变量不同,传递单个变量会创建副本。
你还会注意到,你需要将数组的大小作为单独的参数传入,因为函数无法仅凭指针确定数组的长度。
挑战
简单编写一个 C 程序,通过创建一个处理温度数据的函数,演示如何将数组传递给函数。你的程序应:
- 创建一个名为
analyzeTemperatures的函数,将整数数组及其大小作为参数 - 在
analyzeTemperatures函数中,计算并打印平均温度,保留 1 位小数,格式为:Average temperature: [value] - 在
analyzeTemperatures函数中,找出并打印最高温度,格式为:Highest temperature: [value] - 在
analyzeTemperatures函数中,统计高于 25 度的温度数量,并按以下格式打印数量:Days above 25 degrees: [count] - 在
main函数中,读取一个整数n,表示温度读数的数量 - 读取
n个温度值,并将它们存储在一个整数数组中 - 调用
analyzeTemperatures函数,并传入数组及其大小
你的程序应处理温度数据并显示分析结果。例如,如果输入为:
5
20 28 15 32 26你的输出应为:
Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3这个挑战演示了如何将数组作为指向其首个元素的指针传递给函数。这样,函数就能访问并处理原数组的所有元素,而无需创建副本。
亲手试试
#include <stdio.h>
// TODO: 在这里创建 analyzeTemperatures 函数
int main() {
// 读取温度读数的数量
int n;
scanf("%d", &n);
// 声明一个数组来存储温度值
int temperatures[n];
// 读取温度值
for (int i = 0; i < n; i++) {
scanf("%d", &temperatures[i]);
}
// TODO: 在这里调用 analyzeTemperatures 函数
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器