函数传参的一点小体会
程序代码:
#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; }在传参时总是不能很好的对应,自己总结了一下,有些体会。
可以把//挨个去掉,有不足的地方多多指教,多多给力!