美文网首页
C语言值传递--迷思,与C++比较

C语言值传递--迷思,与C++比较

作者: 木容虾 | 来源:发表于2019-04-25 15:58 被阅读0次

    最近学习c语言的过程中被之前的c++习惯所困扰,其中最迷惑的地方在于函数调用时,值的传递方式。
    总体要说的传递方式分为三大板块,值传递,指针传递,和引用传递。关于三者的区别在网上也有详细解释,但部分感觉对新手还是比较容易迷糊,所以说下自己更详细的理解。
    首先,对C来讲,传递方式只有两种,值传递与指针传递。
    引用传递独属于C++,看看以下代码:

    void valueTf(int a)   //值传递
    void pointTf(int* a)  //指针传递
    void referenceTf(int& a)  //引用传递
    

    一、值传递
    值传递原理非常简单,即将传递的参数复制一份给形参,对于第一个方法value来讲,将形参a直接与传递的数值相等,比如传递的数值为int b; 那么value的意义即为 int a=b;

    二、指针传递
    指针传递不过是特殊的值传递,只不过传递的是地址本身,如第二个方法pointTf(int* a),形参为int* a,在传递参数时,不管你传递的是什么,都被视为 int* a=被传递值。也就是说,如果你传递&b,那么a就指向b的地址,如果传递常数 8,a就指向0x08.

    以上两种方式在C与C++中有相同表现,但值得注意的是,C++在引用上面两个方法时更加规范,在C中,valueTf(a),valueTf(&a),pointTf(a),
    pointTf(&a)都能通过编译,理论上讲,这并没有什么问题,有问题也是程序员的问题。但在C++中,这两种方式被限定,valueTf不能传递地址,pointTf也不能传递非地址。

    三、引用传递
    此传递方式最容易迷惑人,这是c++的新特性,要理解它首先要知道,c++里有一个怪东西,叫引用,记作 int & a;引用理解为绰号,也就是右值的小名,所以显然引用无法单独存在,

    int &a;////显然不行,小名不能单独存在,必须依附于大名.
    int b=3;
    int &a=b;//正确
    

    理解引用后,引用传递就变得简单,与前面所诉一样,不过是
    int&a=b 罢了。当然关于引用本身还有很多能说的,但对于理解这三种传递方式,到这里也就差不多了。

    相关文章

      网友评论

          本文标题:C语言值传递--迷思,与C++比较

          本文链接:https://www.haomeiwen.com/subject/sedzgqtx.html