在C语言中,函数调用传递数据有以下几种常见的方法:
1. **传值调用(Call by Value)**:在传值调用中,实参的值被复制到形参中,函数内部对形参的修改不会影响到实参。这意味着函数对形参的操作是局部的,不会影响到外部的数据。
```c
#include <stdio.h>
// 函数声明
void changeValue(int x);
int main() {
int num = 10;
// 函数调用,传递的是num的值
changeValue(num);
// 输出结果,num的值没有变化
printf("The value of num after function call: %d\n", num);
return 0;
}
// 函数定义,形参x接收实参的值,但修改x不会影响到num
void changeValue(int x) {
x = x + 5;
printf("The value of x inside function: %d\n", x);
}
```
2. **传址调用(Call by Reference)**:在传址调用中,实参的地址被传递给函数,函数可以通过指针对实参进行修改,从而影响外部的数据。
```c
#include <stdio.h>
// 函数声明
void changeValue(int *ptr);
int main() {
int num = 10;
// 函数调用,传递的是num的地址
changeValue(&num);
// 输出结果,num的值被修改
printf("The value of num after function call: %d\n", num);
return 0;
}
// 函数定义,形参ptr是一个指针,可以通过ptr修改num的值
void changeValue(int *ptr) {
*ptr = *ptr + 5;
printf("The value of num inside function: %d\n", *ptr);
}
```
这两种方法各有优劣,传值调用简单直观但无法修改外部数据,而传址调用可以修改外部数据但需要使用指针,稍微复杂一些。在实际应用中,根据需求选择合适的方法。