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)