在C语言中,数组作为函数参数的传递方式有两种:传值和传地址,下面我们分别介绍这两种传递方式的原理及使用方法。
(图片来源网络,侵删)
1、传值传递
传值传递是指将实参的值复制一份传递给形参,这样在函数内部对形参的操作不会影响到实参,对于数组来说,传值传递实际上是将数组的首地址传递给形参,然后在函数内部对形参进行操作时,实际上是对原数组的副本进行操作,而不是对原数组进行操作,传值传递不会改变原数组的内容。
下面是一个简单的示例:
#include <stdio.h> void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf(" "); } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); printArray(arr, size); // 输出:1 2 3 4 5 return 0; }
在这个示例中,我们定义了一个名为printArray
的函数,它接受一个整型数组arr
和一个整数size
作为参数,在函数内部,我们使用size
来遍历数组并打印其内容,在main
函数中,我们创建了一个整型数组arr
,并将其首地址和大小传递给printArray
函数,由于这里使用的是传值传递,所以在printArray
函数内部对数组的操作不会影响到原数组。
2、传地址传递
传地址传递是指将实参的地址传递给形参,这样在函数内部对形参的操作会直接影响到实参,对于数组来说,传地址传递实际上是将数组的首地址直接传递给形参,然后在函数内部对形参进行操作时,实际上是对原数组进行操作,而不是对原数组的副本进行操作,传地址传递会改变原数组的内容。
下面是一个简单的示例:
#include <stdio.h> void modifyArray(int arr[], int size) { for (int i = 0; i < size; i++) { arr[i] *= 2; // 将数组中的每个元素乘以2 } } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); modifyArray(arr, size); // 修改数组内容 printArray(arr, size); // 输出:2 4 6 8 10 return 0; }
在这个示例中,我们定义了一个名为modifyArray
的函数,它接受一个整型数组arr
和一个整数size
作为参数,在函数内部,我们使用size
来遍历数组,并将每个元素乘以2,由于这里使用的是传地址传递,所以在modifyArray
函数内部对数组的操作会直接影响到原数组,在main
函数中,我们创建了一个整型数组arr
,并将其首地址和大小传递给modifyArray
函数,调用modifyArray
函数后,原数组的内容被修改为2、4、6、8、10。
C语言中数组作为函数参数的传递方式有两种:传值和传地址,传值传递是将实参的值复制一份传递给形参,不会改变原数组的内容;传地址传递是将实参的地址传递给形参,会改变原数组的内容,在实际编程中,我们需要根据实际需求选择合适的传递方式。
评论(0)