传值与传址调用
在C语言中,函数参数的调用有两种方式,传值调用和传址调用,根据不同的情况选择合适的调用方式。
1. 传值调用
所谓的传值调用,就是将变量的值复制一份给函数的参数。函数内的操作对原变量不造成影响。如下,
#include <stdio.h>
void Swap(int a, int b)
{
inttemp = a;
a= b;
b= temp;
printf("函数内:a= %d, b = %d\n", a,b);
}
int main()
{
inta = 100;
intb = 200;
printf("初始值:a= %d, b = %d\n", a,b);
Swap(a, b);
printf("函数外:a= %d, b = %d\n", a,b);
return0;
}
2. 传址调用
传址调用是将函数要用到的变量,将该变量的地址作为参数传给函数,此时函数内对该变量的操作将直接影响着原变量。
#include <stdio.h>
void Swap(int* pa, int* pb)
{
inttemp = *pa;
*pa = *pb;
*pb = temp;
printf("函数内:a= %d, b = %d\n", *pa, *pb);
}
int main()
{
inta = 100;
intb = 200;
printf("初始值:a= %d, b = %d\n", a,b);
Swap(&a, &b);
printf("函数外:a= %d, b = %d\n", a,b);
return0;
}
3. 传值与传址调用的选择原则
(1) 对于函数内不需要对原变量进行操作的一般选择传值调用,反之则选择传址调用。
(2) 结构体,数组等所占空间大的变量一般都是选择传址调用。若是不对原变量操作可灵活使用const限定符修饰。(数组较特殊它只有传址一种调用方式,函数内对它的操作要特别注意)