函数传参的一点小体会
程序代码:#include<stdio.h>
void fun(int in)//传值 复制数值传给in
{
int u=100;
in = u;
}
void fun_1(int *x)//传地址改变数值 x为地址(传入参数一般是指针或者是&整形变量)
{
int b=77;
*x=b;
}
void fun_2(int &v)//传地址改变数值 v为值(传入参数一般是*指针或者是整形变量)
{
int c=89;
v=c;
}
void fun_3(int *z)//传地址数值不变 z为地址(传入参数一般是指针或者是&整形变量)
{
int b=77;
int *i;
i=&b;
z=i;
}
void change_1(int a,int b)//交换-传值
{
int t;
t=a;
a=b;
b=t;
}
void change_2(int *a,int *b)//交换-传地址,值交换
{
int t;
t=*a;
*a=*b;
*b=t;
}
void change_3(int *a,int *b)//交换-传地址,地址交换
{
int *t;
t=a;
a=b;
b=t;
}
void change_4_error(int *a,int *b)//交换-传地址(程序非法!)
{
int *t;
*t=*a;//执行到这里出现非法,t没初始化,*t非法
*a=*b;
*b=*t;
}
int main()
{
//*-----------------------------------------------------------------------------
int y1=9; //测试变量y1
int *p1=&y1; //测试指针p1
//fun(y1)通过编译,y1没有变化fun(y1)=fun(*p1);fun(p1)没有通过编译.
//fun_1(&y1)可以,并且y1发生变化.fun_1(p1)=fun_1(&y1);fun_1(y1)没有通过编译
//fun_2(y1)通过编译,并且y1发生变化fun_2(y1)=fun_2(*p1);fun_2(p1)没有通过编译
//可以看出*x和&v都是要用地址,不复制数值!
fun_3(p1);
printf("y1=%d\n",y1);
//-------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------------
//数据交换测试
int x1=22,x2=88; //测试变量x1,x2
int *ip1,*ip2; //测试指针p1,p2
ip1=&x1;//ip1指向x1
ip2=&x2;//ip2指向x2
//change_1(x1,x2)=change_1(*ip1,*ip2)数值不变
//change_2(&x1,&x2)=change_2(ip1,ip2)交换数值
//change_3(&x1,&x2)=change_3(ip1,ip2)数值不变
//change_4_error(ip1,ip2)错误函数
printf("x1=%d,x2=%d;*ip1=%d,*ip2=%d\n",x1,x2,*ip1,*ip2);
/---------------------------------------------------------------------------------*/
return 0;
}
在传参时总是不能很好的对应,自己总结了一下,有些体会。可以把//挨个去掉,有不足的地方多多指教,多多给力!








原来这样也行呀,学习了


谢谢各位了。