Menu
CoddyTech

向函数传递数组

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 29 课,共 63 课。

在 C 中将数组传递给函数时,幕后会发生一件有趣的事。数组本身并不会真正复制到函数中。相反,传递的是指向数组第一个元素的指针。

这意味着,当你编写类似 int arr[] 或 int *arr 这样的函数参数时,两者是等价的,它们都表示指向数组第一个元素的指针。函数会接收数组起始位置的内存地址,从而可以直接访问原数组中的数据。

void printArray(int arr[], int size) {
    // arr 实际上是指向第一个元素的指针
    // 这个函数可以访问和修改原始数组
}

由于函数使用的是原始数组的内存位置,而不是副本,因此在函数内部所做的任何更改都会影响原始数组。这与传递单个变量不同,传递单个变量会创建副本。

你还会注意到,你需要将数组的大小作为单独的参数传入,因为函数无法仅凭指针确定数组的长度。

challenge icon

挑战

简单

编写一个 C 程序,通过创建一个处理温度数据的函数,演示如何将数组传递给函数。你的程序应:

  1. 创建一个名为 analyzeTemperatures 的函数,将整数数组及其大小作为参数
  2. 在 analyzeTemperatures 函数中,计算并打印平均温度,保留 1 位小数,格式为:Average temperature: [value]
  3. 在 analyzeTemperatures 函数中,找出并打印最高温度,格式为:Highest temperature: [value]
  4. 在 analyzeTemperatures 函数中,统计高于 25 度的温度数量,并按以下格式打印数量:Days above 25 degrees: [count]
  5. 在 main 函数中,读取一个整数 n,表示温度读数的数量
  6. 读取 n 个温度值,并将它们存储在一个整数数组中
  7. 调用 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;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器