1. 传值
(1)形参和实参各占一个独立的存储空间。
(2)形参的存储空间是函数被调用时才分配的,调用开始,系统为形参开辟一个临时的存储区,然后将各实参传递给形参,这是形参就得到了实参的值。
例子
#include<stdio.h>
void swap1(int x, int y)//定义中的x,y变量是swap函数的两个形参
{
int tmp;
tmp = x;
x = y;
y = tmp;
printf("x=%d,y=%d\n", x, y);
}
int main()
{
int a = 2;
int b = 3;
swap1(a, b);//a,b变量为swap函数的实际参数
printf("a=%d,b=%d", a, b);
return 0;
}
此时输出的 a = 2;b=3;
2. 传名
引用传递是以引用为参数,则既可以使得对形参的任何操作都能改变相应数据,又使函数调用方便。引用传递是在形参调用前加入引用运算符“&”。引用为实参的别名,和实参是同一个变量,则他们的值也相同,该引用改变则它的实参也改变。
#include<stdio.h>
void swap3(int &x,int &y)
{
int tmp = x;
x = y;
y = tmp;
printf("x=%d,y=%d\n", x, y);
}
int main()
{
int a = 2;
int b = 3;
swap3(a, b);//调用方式与传值一样
printf("a=%d,b=%d", a, b);
system("pause");
return 0;
此时输出的a=3;b=2;
3. 传地址
它把实参的存储地址传送给形参,使得形参指针和实参指针指向同一块地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
void swap2(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
printf("px=%d,py=%d\n", *px, *py);
}
int main()
{
int a = 2;
int b = 3;
swap2(&a, &b);/*调用了swap函数,同样也有隐含动作px=&a;py=&b;*/
printf("a=%d,b=%d", a, b);
return 0;
}