在 C 中传递数组作为函数参数

你好呀,未来的编程超级巨星!? 今天,我们将踏上一段激动人心的旅程,探索 C 语言中的数组和函数世界。作为你友好邻里的计算机科学老师,我将一步一步地引导你完成这次冒险。所以,拿起你的虚拟背包,让我们一起跳进去吧!

C - Passing Arrays to Function

理解数组和函数

在我们跳到传递数组到函数之前,让我们快速回顾一下数组和函数是什么。

什么是数组?

想象一下数组就像学校走廊里的一排储物柜。每个储物柜(元素)都有一个编号(索引),并且可以在里面存放东西。在 C 语言中,我们使用数组来在单个变量中存储多个同类型的项。

什么是函数?

函数就像是我们主程序中的一个小程序。它是一组执行特定任务的指令。把它想象成食谱卡片上的一个食谱——每次你需要执行那个特定的任务时,你都可以使用它。

现在我们已经掌握了基础知识,让我们来探索如何结合这两个概念!

传递数组作为函数参数

在 C 语言中,我们可以用不同的方式传递数组到函数。让我们逐一看看每种方法。

1. 使用值调用方法传递数组

在 C 语言中,当我们传递一个数组到函数时,实际上传递的是数组的第一个元素的地址。这意味着在函数内部对数组的任何修改都会影响原始数组。

让我们看一个例子:

#include <stdio.h>

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

int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);

printf("原始数组: ");
printArray(myArray, size);

return 0;
}

在这个例子中,我们将 myArray 传递给了 printArray 函数。尽管看起来我们传递了整个数组,但实际上我们传递的是指向第一个元素的指针。

输出:

原始数组: 1 2 3 4 5

2. 使用引用调用传递数组

在 C 语言中,数组总是通过引用传递。这意味着当你传递一个数组到函数时,实际上传递的是指向数组第一个元素的指针。

让我们看一个修改数组内部的例子:

#include <stdio.h>

void doubleElements(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}

int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);

printf("原始数组: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");

doubleElements(myArray, size);

printf("修改后的数组: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");

return 0;
}

在这个例子中,doubleElements 函数通过加倍每个元素来修改原始数组。

输出:

原始数组: 1 2 3 4 5
修改后的数组: 2 4 6 8 10

3. 将二维数组传递到函数

现在,让我们升级一下,来谈谈如何将二维数组传递到函数。这就好比交给你整个工作表,而不仅仅是单行!

这里是一个例子:

#include <stdio.h>

void print2DArray(int rows, int cols, int arr[rows][cols]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}

int main() {
int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

printf("我的二维数组:\n");
print2DArray(3, 3, myArray);

return 0;
}

在这个例子中,我们将一个二维数组传递给了 print2DArray 函数。注意我们在函数参数中指定了维数。

输出:

我的二维数组:
1 2 3
4 5 6
7 8 9

4. 比较字符串长度的函数

最后但同样重要的是,让我们看看如何将字符串(本质上是指针数组)传递到函数。我们将创建一个函数来比较两个字符串的长度。

#include <stdio.h>
#include <string.h>

int compareStringLengths(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);

if (len1 > len2) return 1;
if (len1 < len2) return -1;
return 0;
}

int main() {
char string1[] = "Hello";
char string2[] = "World!";

int result = compareStringLengths(string1, string2);

if (result > 0) {
printf("%s 比 %s 长\n", string1, string2);
} else if (result < 0) {
printf("%s 比 %s 长\n", string2, string1);
} else {
printf("%s 和 %s 长度相同\n", string1, string2);
}

return 0;
}

在这个例子中,我们将两个字符串传递给了 compareStringLengths 函数,它返回 1 如果第一个字符串更长,返回 -1 如果第二个字符串更长,如果长度相同则返回 0。

输出:

World! 比 Hello 长

结论

恭喜你!你已经通过学习如何在函数中传递数组,升级了你的 C 编程技能。记住,熟能生巧,所以不要犹豫,在你的程序中尝试这些概念。

这里是我们覆盖方法的快速参考表:

方法 描述
使用值调用传递数组 传递第一个元素的地址
使用引用调用传递数组 在 C 中总是通过引用传递
传递二维数组 需要在函数参数中指定维数
传递字符串 可以用来操作或比较字符串

继续编码,继续学习,最重要的是,继续享受乐趣!??

Credits: Image by storyset