C语言中将一维与二维数组传递给函数的实战指南
C语言中将一维与二维数组传递给函数的实战指南
本教程通过清晰的代码示例和最佳实践技巧,讲解如何在C语言中将整个数组(包括一维和多维数组)传递给函数。
在C语言中,数组名在传递给函数时会退化为指针,这使得函数能够直接操作原始数据而无需复制。理解这一行为对于编写高效、可维护的代码至关重要。
传递单个数组元素
传递单个元素与传递任何基本类型完全相同。
示例 1:传递单个数组元素
#include <stdio.h>
void display(int age1, int age2) {
printf("%d\n", age1);
printf("%d\n", age2);
}
int main() {
int ageArray[] = {2, 8, 4, 12};
// 将第二个和第三个元素传递给 display()
display(ageArray[1], ageArray[2]);
return 0;
}
输出
8 4
这里我们像传递普通变量一样传递 ageArray[1] 和 ageArray[2]。函数按值接收它们,因此原始数组保持不变。
传递整个一维数组
要将整个数组传递给函数,只需提供数组名。函数原型必须指明数组参数,但实际大小可以省略。编译器将参数视为指向首元素的指针。
示例 2:计算数组元素之和
#include <stdio.h>
float calculateSum(float num[]);
int main() {
float result, num[] = {23.4, 55, 22.6, 3, 40.5, 18};
// 将整个数组传递给 calculateSum()
result = calculateSum(num);
printf("Result = %.2f", result);
return 0;
}
float calculateSum(float num[]) {
float sum = 0.0;
for (int i = 0; i < 6; ++i) {
sum += num[i];
}
return sum;
}
输出
Result = 162.50
函数签名 float calculateSum(float num[]) 告诉编译器 num 是指向 float 数组的指针。循环在原地处理数组,无需复制。
传递多维数组
多维数组遵循相同原则:数组名退化为指向第一行的指针。然而,编译器必须知道除第一维以外所有维度的大小,以便计算正确的内存偏移量。
示例 3:传递二维数组
#include <stdio.h>
void displayNumbers(int num[2][2]);
int main() {
int num[2][2];
printf("请输入 4 个数字:\n");
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
scanf("%d", &num[i][j]);
}
}
// 将二维数组传递给函数
displayNumbers(num);
return 0;
}
void displayNumbers(int num[2][2]) {
printf("显示内容:\n");
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
printf("%d\n", num[i][j]);
}
}
}
输出
请输入 4 个数字: 2 3 4 5 显示内容: 2 3 4 5
函数原型 void displayNumbers(int num[2][2]) 声明了一个 2×2 的整型数组。调用函数时只需传递 num;编译器会自动处理指针转换。
注意:可以省略行维度,但必须指定列大小:int num[][2] 是合法的,而列大小对于地址计算至关重要。
重要提示: C语言允许将数组传递给函数,但不支持直接从函数返回数组。如需返回复杂数据,请使用指针或结构体。
C语言