Call by value 按值传递
代码:
#include<stdio.h>
void Fun(int par);
int main()
{
int arg=1;
printf("arg=%d\n",arg);//调用函数之前
Fun(arg);
printf("arg=%d\n",arg);//调用函数之后
return 0;
}
void Fun(int par)
{
printf("par=%d\n",par);
par=2;
}
运行结果:
arg=1
par=1
arg=1
按值传递,用形象的比喻来说就是:我有了一套房子,我现在把这个房子给你(你是函数)让你随便布置,但我给的不是我自己的房子,而是再建了一座一模一样的房子给了你让你布置,所以无论你布置得多么天花乱坠,我的房子依然不变。
Call by reference 按引用传递
代码:
#include<stdio.h>
void Fun(int *par);
int main()
{
int arg=1;
printf("arg=%d\n",arg);//调用函数之前
Fun(&arg);
printf("arg=%d\n",arg);//调用函数之后
return 0;
}
void Fun(int *par)
{
printf("par=%d\n",*par);
*par=2;
}
运行结果:
arg=1
par=1
arg=2
按引用传递就是:我直接把这个房子给了你,所以在你布置一番之后我拿到手的房子就不是之前的房子了,而是你所布置之后的房子。