c语言函数的单向传递,题目:参数值的单向传递

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

float main()

{

int x=2,y=3,z=0;//定义并赋值

printf("(1)x=%d y=%d z=%d\n",x,y,z);//打印出最初各变量的初值

ty(x,y,z);//调用函数,并通过值传递方式传递参数,实际上就是复制了一份参数的值过去给被 调函数

printf("(4)x=%d y=%d z=%d\n",x,y,z);//由于被调函数没有返回值,因此此处的xyz的值仍然是你最初赋的值,你可以值么理解,这三个变量的值至此都没被修改过,只被复制过一次

return (0);//这句就不解释了,但一般是return 0,并且是main()的返回值是int,从严谨的角度来说,可以钻研一下这该怎么写。

}

ty (int x,int y,int z)//函数的定义,严格上来说,如果不返回值,最好带个void(c99定义看多了的人,有强迫症。。。莫怪)

{

printf("(2)x=%d y=%d z=%d\n",x,y,z);//打印一次传过来的值,也就是从main函数内复制过来的

z=x+y;

x=x*x;

y=y*y;//以上三行为对三个数的修改,此时千万要记住,这里的xyz在内存中跟main函数内的xyz完全是不同的三个变量,你在此修改这三个变量,完全不会影响main函数内的xyz的值。

printf("(3)x=%d y=%d z=%d\n",x,y,z);//打印修改后的三个值,执行到这,调用就算结束,直接返回到printf("(4)x=%d y=%d z=%d\n",x,y,z);这句继续执行,所以这句打印出来的是你最开始赋的值。。。

哎,累死了~!不知道解释清楚了没。

当然,你可以这样

float main()

{

int x=2,y=3,z=0,*px,*py,*pz;//此处多定义三个整形指针

*px=&x;

*py=&y;

*pz=&z;//分别把地址付给对应的指针

printf("(1)x=%d y=%d z=%d\n",x,y,z);//main函数内第一次打印三个值,值未作改变

ty(px,py,pz);//调用函数,并把指针作为参数传给ty()

printf("(4)x=%d y=%d z=%d\n",x,y,z);//第四次打印,打印修改后的三个值

return (0);

}

ty (int *x,int *y,int *z)

{

printf("(2)x=%d y=%d z=%d\n",*x,*y,*z);//第二次打印三个值,值未作改变

*z=*x+*y;

*x=(*x)*(*x);

*y=(*y)*(*y);//根据三个地址,修改对应的参数值

printf("(3)x=%d y=%d z=%d\n",*x,*y,*z);//第三次打印,打印修改后的三个值

}

指针传递的是地址,无论这个地址对应的是多大的内存块,好处就是快,飞快。值传递跟参数传递其实都是方法,各有适用场景,大多数情况下用参数传递多,毕竟用一个指针就搞定了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值