美文网首页
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++比较

    最近学习c语言的过程中被之前的c++习惯所困扰,其中最迷惑的地方在于函数调用时,值的传递方式。总体要说的传递方式分...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • C++ 引用传递的学习

    C++ 引用与引用作为函数的参数C++函数的三种传递方式为:值传递、指针传递和引用传递 C++ 上课习题 刘月林2...

  • C++中的指针和引用与Java中的引用区别

    C++的指针和Java中的引用比较像,在作为函数参数传递时,都可以在函数内部改变 ”外部“ 的值 C++的引用使用...

  • C++远征之起航篇

    C++和C语言的联系与区别: C++是C语言发展而来,C语言是C++的子集 C++更高效3.相对于C语言,C++添...

  • OpenGLES3.0笔记 (三) —— GLSL语法

    [TOC] OpenGL ES着色语言虽然是基于C/C++基本语法的语言,但是其与C/C++相比较还是有很大不同的...

  • Java的深拷贝与浅拷贝

    在学习C++时,老师说过值传递与引用传递。Java中只有值传递。今天我们就来讨论一下什么是浅拷贝与深拷贝。先写一个...

  • C++语言学习之面向对象

    1.C语言与C++语言的区别 C++面向对象 C 面向过程 函数+结构体 C++可以运行调用C语言 反之 C语言无...

  • C语言值传递与址传递

    高考过后,你不用告诉我你考多少分,悲喜之后也不要告诉我你志愿填了哪里,只要告诉我最后去了哪?我坐火车或飞机要多久,...

  • c,c++与java先学哪个好?学哪个前景好

    现在c,c++与java是比较热门的编程语言。c,c++与java现在学哪个前景好这个问题也是IT界争论不休的话题...

网友评论

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

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