在C语言中,将数组作为函数参数传递可以通过以下几种方式实现:
(图片来源网络,侵删)
1、传址调用(Pass by Address):
使用指针作为函数参数。
修改实参的值会同时修改形参的值。
2、传值调用(Pass by Value):
使用数组名作为函数参数。
修改形参的值不会影响实参的值。
下面是详细的解释和示例代码:
1. 传址调用(Pass by Address)
在传址调用中,函数接收的是实参的地址,因此对形参的修改会影响实参的值,为了实现传址调用,需要将实参定义为指针类型。
步骤:
1、定义一个函数,并将形参声明为指针类型。
2、在函数内部,通过解引用指针来访问和修改数组元素。
3、调用函数时,将实参的地址传递给形参。
示例代码:
#include <stdio.h> void modifyArray(int *arr, int size) { // 修改数组元素 for (int i = 0; i < size; i++) { arr[i] = arr[i] * 2; // 将每个元素乘以2 } } int main() { int myArray[] = {1, 2, 3, 4, 5}; // 定义一个整型数组 int size = sizeof(myArray) / sizeof(myArray[0]); // 计算数组大小 printf("Before modification: "); for (int i = 0; i < size; i++) { printf("%d ", myArray[i]); // 输出修改前的数组元素 } printf(" "); modifyArray(myArray, size); // 调用函数,将数组地址传递给形参 printf("After modification: "); for (int i = 0; i < size; i++) { printf("%d ", myArray[i]); // 输出修改后的数组元素 } printf(" "); return 0; }
输出结果:
Before modification: 1 2 3 4 5 After modification: 2 4 6 8 10
2. 传值调用(Pass by Value)
在传值调用中,函数接收的是实参的值的副本,因此对形参的修改不会影响实参的值,为了实现传值调用,需要将实参定义为数组名。
步骤:
1、定义一个函数,并将形参声明为数组类型,注意不需要使用指针。
2、在函数内部,直接访问和修改数组元素,由于是传值调用,形参会创建实参的一个副本。
3、调用函数时,将实参数组名传递给形参,不需要使用取地址运算符(&)。
示例代码:
#include <stdio.h> void modifyArray(int arr[], int size) { // 修改数组元素(这里是对副本进行操作) for (int i = 0; i < size; i++) { arr[i] = arr[i] * 2; // 将每个元素乘以2,不影响原始数组的值 } } int main() { int myArray[] = {1, 2, 3, 4, 5}; // 定义一个整型数组 int size = sizeof(myArray) / sizeof(myArray[0]); // 计算数组大小 printf("Before modification: "); for (int i = 0; i < size; i++) { printf("%d ", myArray[i]); // 输出修改前的数组元素 } printf(" "); modifyArray(myArray, size); // 调用函数,将数组名传递给形参(不需要取地址运算符) printf("After modification: "); for (int i = 0; i < size; i++) { printf("%d ", myArray[i]); // 输出修改后的数组元素(仍然是原始值) } printf(" "); return 0; }
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)