指针的应用(关于形参)

值的传递

当两个变量想用函数将变量存的值进行操作时,所引用的函数假如直接用一般变量去作为参数,会导致只是把参数的值改变了,而不会传回原来的变量中,例如在上图中,swap函数的参数是用变量a,b直接作为参数而不是用指针,就会导致:第一步,x、y先把值传给a、b,第二步,a、b所存的值进行交换了,而x,y所存的值则并没有发生交换。

指针的传递

用了指针之后,ap、bp存的是x、y的地址,*ap、*bp就是指向x、y所表示的空间,交换*ap、*bp的值就能间接将x、y所存的值交换。

注意:实参传值给形参,是从右到左的传值顺序。

例题:

  注意到第十一行的引用fun函数,fun函数的形参是一个指针,所以实参s(s是一个存了x的地址的指针)就会把地址传给p,然后fun函数在第四行的代码中会将形参p所存的地址的空间的值改为100,即p是指 指针p所存的地址(此时是x的地址),而*p就是指的是x的空间,*p=100就是将x的空间的值(原来为0)改为100。

  在最后第十二行中输出的是x和*s。x原来存的是0,然后在第四行中改为100,所以输出的是100。s存的是x的地址,*s就是指x的空间的值,也就是100。

  有疑问的点在于:第五行,将p的空间所存的地址改为a的地址,为什么不是代指s的地址也指向a的地址,fun函数的形参不是已经将p等同于s了吗?为什么输出的不是a的值(即200)?

  答:看代码要一行一行地看,传值只是实参传给了形参,传完之后,p存的地址是s的地址,后面第五行的代码将地址改了,也就是p存的地址改为a的地址,所以s与p已经没有关系了,所以最后输出*s就是输出x的值,而不是输出a的值,因为第五行的代码改变的是p存的地址,而不是改变的是s的地址。

  所以,被调用函数的参数使用指针是为了通过间接的方式去修改实参,即通过指针去将实参所存的值进行处理。但关键是调用函数时,形参的地址是由实参传递的,若函数中存在对形参的地址再次进行修改,则后面的形参将不会传递到原来的实参。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值