当前位置:首页 > C > 正文

C语言数组作为函数参数详解(新手也能轻松掌握的C语言编程教程)

在学习 C语言编程教程 的过程中,理解如何将 C语言数组传参 是一个非常重要的知识点。很多初学者在刚开始接触 C语言函数参数 时会感到困惑:为什么把数组传给函数后,函数内部对数组的修改会影响原始数组?本文将用通俗易懂的方式,带你彻底搞懂 数组作为函数参数 的原理和使用方法。

一、为什么数组传参和其他变量不一样?

在 C 语言中,当我们把一个普通变量(比如 int、float)传递给函数时,是“值传递”——也就是说,函数接收到的是该变量的一个副本,函数内部对该副本的修改不会影响原始变量。

但数组不同!当你把数组名作为参数传递给函数时,实际上传递的是数组首元素的地址,也就是一个指针。这意味着函数内部操作的是原始数组本身,而不是它的副本。

C语言数组作为函数参数详解(新手也能轻松掌握的C语言编程教程) C语言数组传参 C语言函数参数 数组作为函数参数 C语言编程教程 第1张

二、基本语法:如何将数组传给函数?

在函数定义中,你可以用以下几种方式声明数组参数(它们本质上是等价的):

// 方式1:使用空方括号void printArray(int arr[], int size);// 方式2:使用指针void printArray(int *arr, int size);// 方式3:指定数组大小(但编译器会忽略这个大小)void printArray(int arr[10], int size); // 实际上和 arr[] 没区别

注意:无论你写成 int arr[] 还是 int *arr,在函数内部,arr 都是一个指向 int 类型的指针。

三、完整示例:打印并修改数组

下面是一个完整的例子,演示如何将数组传递给函数,并在函数中修改它:

#include <stdio.h>// 函数:打印数组void printArray(int arr[], int size) {    for (int i = 0; i < size; i++) {        printf("%d ", arr[i]);    }    printf("\n");}// 函数:将数组每个元素乘以2void doubleArray(int arr[], int size) {    for (int i = 0; i < size; i++) {        arr[i] *= 2;    }}int main() {    int numbers[] = {1, 2, 3, 4, 5};    int len = sizeof(numbers) / sizeof(numbers[0]);    printf("原始数组: ");    printArray(numbers, len);    doubleArray(numbers, len);    printf("修改后数组: ");    printArray(numbers, len);    return 0;}

运行结果:

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

可以看到,doubleArray 函数成功修改了主函数中的 numbers 数组,这正是因为数组是以地址形式传递的。

四、重要注意事项

  • 数组长度不会自动传递:C 语言不会自动告诉函数数组有多长,所以通常需要额外传入数组大小(如上面的 size 参数)。
  • sizeof 在函数内无效:在函数内部对参数数组使用 sizeof(arr) 得到的是指针的大小(通常是 8 字节),而不是整个数组的大小。
  • 多维数组传参要小心:对于二维数组,必须指定第二维的大小,例如 void func(int arr[][5], int rows);

五、总结

通过本篇 C语言编程教程,你应该已经掌握了 C语言数组传参 的核心概念:数组名作为函数参数时,实际上传递的是地址,因此函数可以直接修改原数组。同时你也学会了如何正确声明函数参数、如何安全地遍历数组。

记住关键点:数组作为函数参数 本质是指针传递,务必手动传递数组长度,避免越界访问。掌握这些知识,你就离写出更安全、高效的 C 程序又近了一步!

—— 学好 C语言函数参数,从理解数组开始 ——