您的位置:首页 > 编程语言 > C语言/C++

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

2018-03-05 19:38 302 查看
   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本身了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: