函数传参数
我们来写一个两个数交换的函数帮助理解:
#include <stdio.h>
void myswap1(int x,int y)
{
int t;
t = x;
x = y;
y = t;
}
void myswap2(int *p1,int *p2)
{
int t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
void myswap3(int &x,int &y)
{
int t;
t = x;
x = y;
y = t;
}
int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
//待调用的函数
printf("a=%d,b=%d\n",a,b);
}
一、传值
myswap1(a,b);
如果是这么调用,结果打印出来的是a,b的值没有改变。为什么?顾名思义,这个就只传进了a,b的值,在函数里重新找了两个地址储存了a,b的值并把他们交换了,实际a,b的值没有改变。
二、传地址
myswap2(&a,&b);
这么调用函数功能是可以正常实现的。&是取地址,* 是取值。而int *是一个指针,指针指向地址,所以我们可以直接传入地址
int *p1=&a;
int *p2=&b;
myswap2(p1,p2);
这样传指针也可以。
三、引用做形参
myswap3(a,b);
调用形式跟传值一样,但是定义的时候是引用,意思就是这个是原变量的一个别名,两个名字不一样,但是指向同一个地址。