天人合一之毕设——准备阶段9 C语言的传参形式

   C语言有三种传参方式,传值、传引用、传地址,但是传引用和传地址本质也是值传递。

    有几篇讲解的很好,http://blog.csdn.net/wenhao_ir/article/details/51611388

    https://www.nowcoder.com/questionTerminal/b296e9e1c40542ec8677c1e452b6b576

    http://blog.csdn.net/azhexg/article/details/9311933

    下面为了区别,我们先这么称呼各种访问方式。

   在我所做的毕设内容中,这三种方式对 对象的内外层访问都有影响,所以特来深入探讨下。

    1.单纯传值:值传递是传递了原有对象的一个副本,调用函数可以改变副本的值,但是对原有对象没有任何影响

     (1)外层

     比如:Exchg1(a,b)
     int x=a;//←
     int y=b;//←注意这里,这两行是调用子函数时的隐含操作

    所以在外层其实是访问了a、b的。

    (2)内层

    主要是就是对形参x、y的访问,与a、b无关

    2.传地址

    形式1为:Exchg2(int *px, int *py) { ... }

                  Exchg2(&a,&b);

    (1)外层

    隐含操作:px=&a;

                     py=&b;   //将&a,&b的值赋值给了px,py

    这样外层只有一个取地址操作,并没有涉及到对a对象本身数据的操作,应该不算是对a、b进行访问了把(?)

    (2)内层

    对*px,*py的操作应该也就是对a,b变量本身的操作了把(?)


    形式2为:Exchg2(int *px, int *py) { ... }

                  int *a, int *b;

                  Exchg2(a,b);

    (1)外层 操作应该是  px = a,*py = b吧

            应该是让两个指针指向同一区域,那这样没算访问了a对象吗?(不算吧?)

    (2)内层

        对*px,*py的操作应该也就是对a,b变量本身的操作了把?

 3.传引用

    形式为:Exchg3(int &x, int &y) { ... }   

                  Exchg3(a,b);    //x,y分别引用了a,b变量

    (1)外层

    隐含操作: 引用就是起别名

    将x、y的名字赋给a、b,应该不算对a、b对象的访问

    (2)内层

    函数里头操作的其实就是实参a,b本身了




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值