014. 使用数组作为函数参数

在C语言中,数组作为函数参数时,实际上传递的是数组的首地址(即数组的第一个元素的地址)。这意味着函数内部对数组的修改会直接影响到原始数组。以下将通过具体示例展示如何使用数组作为函数参数,并在函数中处理数组。

示例1:使用数组作为函数参数并修改数组元素

函数定义

定义一个函数,用于将数组中的每个元素增加1。

#include <stdio.h>

// 函数定义:将数组中的每个元素增加1
void incrementArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        arr[i]++; // 修改数组元素
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5}; // 声明并初始化数组
    int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的大小

    printf("Before incrementing:\n");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 调用函数并传递数组
    incrementArray(arr, size);

    printf("After incrementing:\n");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

输出结果

Before incrementing:
1 2 3 4 5 
After incrementing:
2 3 4 5 6 

示例2:使用数组作为函数参数并计算数组的平均值

函数定义

定义一个函数,用于计算数组的平均值并返回结果。

#include <stdio.h>

// 函数定义:计算数组的平均值
double calculateAverage(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i]; // 计算总和
    }
    return (double)sum / size; // 返回平均值
}

int main() {
    int arr[] = {1, 2, 3, 4, 5}; // 声明并初始化数组
    int size = sizeof(arr) / sizeof(arr[0]); // 计算数组的大小

    // 调用函数并接收返回值
    double average = calculateAverage(arr, size);

    printf("The average of the array elements is: %.2f\n", average);

    return 0;
}

输出结果

The average of the array elements is: 3.00

示例3:使用二维数组作为函数参数

函数定义

定义一个函数,用于打印二维数组的所有元素。

#include <stdio.h>

// 函数定义:打印二维数组的所有元素
void printMatrix(int matrix[][4], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int matrix[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    }; // 声明并初始化二维数组

    // 调用函数并传递二维数组
    printMatrix(matrix, 3);

    return 0;
}

输出结果

1 2 3 4 
5 6 7 8 
9 10 11 12 

示例4:使用动态分配的数组作为函数参数

函数定义

定义一个函数,用于将动态分配的数组中的每个元素增加1。

#include <stdio.h>
#include <stdlib.h>

// 函数定义:将数组中的每个元素增加1
void incrementArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i]++; // 修改数组元素
    }
}

int main() {
    int size = 5;
    int *arr = (int *)malloc(size * sizeof(int)); // 动态分配数组

    if (arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // 初始化数组
    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }

    printf("Before incrementing:\n");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 调用函数并传递动态分配的数组
    incrementArray(arr, size);

    printf("After incrementing:\n");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 释放动态分配的内存
    free(arr);

    return 0;
}

输出结果

Before incrementing:
1 2 3 4 5 
After incrementing:
2 3 4 5 6 

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)