C++中使用指针、引用进行参数传递

如图1中在swap函数里进值交换后传回main函数中还是未交换状态,而使用指针(图2)或引用(图3)就可以成功换值了。
为什么呢?菜鸟求高手讲解一下电脑在编译时是怎样运算的啊?

这是经典的C++问题
1、常规情况
函数参数传递是所谓的“值传递”。啥意思,就是传的只是值,而不是变量自己以身相许。上面的例子来说,main中的ab传递给函数的ab发生了什么呢,是main中的ab把值传递给了函数的ab,这是四个变量!!!main的ab和swap的ab不是一码事!!!当swap通过传值得到a5b10后,在swap中会互换,但是main的中的ab怎么会变呢?他们传值完毕后就没有关系了!
2、引用
什么叫引用?引用时变量的别名,也就是引用不是一个独立的变量,只能依附于其他变量。你的例子中swap中没有ab两个变量,只有main中ab的两个别名,只是别名碰巧也叫ab。在swap中对swap的ab的任何操作,本质上操作的都是main的ab!想想一下一个人在mian中叫张三,脸上有胡子。他的小名叫狗剩。在swap中我们说,吧狗剩的胡子刮了。然后回到main中,张三同学的额胡子有没有?当然没有了
3、指针
指针存放对象的地址。在你的例子中,swap中的ab和main中的ab的关系式,swap是mian中ab的地址。想想一下,mian中的ab地址为AB,在swap中我们说吧A地址的家伙变为100,B地址的变为1000.请问mian中变了没有?当然会变!!

这个问题关键是理解第一个部分,swap中的ab和mian中的ab是独立的四个变量
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-04
c++中函数传值有两种方式,一种是传值,还有就是传递引用(指针)。
传值实际上是把实参的值拷贝过去,所以对原来的值没有影响。
而传递指针虽然也是拷贝过去(拷贝的是指针值,不是拷贝指针指向的数,你会发现传递指针的话形参实际上是实参的地址,和直接传值方式形参是不一样的),但是你赋值后会把指针指向的值给替换。你会发现你仅仅想改变指针本身的值还是做不到的,但是这样你可以改变指针指向的值了,而改变不了指针本身其实就和第一个例子一样的道理,因为传递的是拷贝过去的指针值,如果你想改变指针本身的话,就要传递二级指针。
所以在c++里边提倡用引用代替指针作为形参,用引用代码简洁易懂,不容易出错。引用可以理解为实参的别名,你改变它就会改变实参的值。可以把引用理解为const指针。
第2个回答  2014-09-04
传普通数值到函数中,函数对形参进行改变不会影响到主函数中的数据
传指针方式,并且通过指针变量对指针所指的地址中的内容进行改变时,会同时改变主函数中的实参所对应的数据, ( 但如果改的只是指针变量本身的值,则没有影响!! )
引用方式相当于给实参取了个别名,操作哪个变量都相当于操作实参,所以,一变都变。
第3个回答  2014-09-04
形参值的改变不会引起实参改变,引用和指针可以改变实参的值。这么说能懂吗?也就是第一个中,改变的仅仅是swap函数里的a和b,并没有改变主函数下的a和b。第二个和第三个,使用了指针和引用,都改变了原来主函数的a和b。
第4个回答  2014-09-04
第一张图,你只是传入一个参数,只是一个值,就是在main函数里定义的,在swap函数里面是有进行参值的改变,而函数结束后,参形并不能改变实参,所以值没有变。你第二和第三张,传入的是两个实参的地址,把地址里的内容进行交换,就是两个值,而改变后的值在放入地址里面,所以有改变值。简单点讲就是第一张只是值的改变,但地址的内容没变,第二第三直接是地址里的内容进行改变。

C++中使用指针、引用进行参数传递
这是经典的C++问题 1、常规情况 函数参数传递是所谓的“值传递”。啥意思,就是传的只是值,而不是变量自己以身相许。上面的例子来说,main中的ab传递给函数的ab发生了什么呢,是main中的ab把值传递给了函数的ab,这是四个变量!!!main的ab和swap的ab不是一码事!!!当swap通过传值得到a5b10...

C++中引用与指针的区别
- 指针的值可以改变,指向不同的内存单元,而引用在初始化后不可更改。- `sizeof`引用得到的是所指向变量的尺寸,而`sizeof`指针得到的是指针本身的大小。- 指针和引用的自增(++)运算意义不同。2. 指针和引用作为函数参数传递时的区别:- 当指针作为参数传递时,传递的是实参的地址。这意味着在...

C++中函数的参数传递,引用传递和指针传递的别。哪种更有效率。_百度知...
不过个人感觉哈,引用传递看着更加直白。所以个人习惯引用

c++中int InitList(SqList &L)的(SqList &L)是什么意思,为什么要用指 ...
initlist(sqlist*&L)中的*&L是引用。c++中的概念,int a;int &b=a;这就声明了b是a的引用,经过这样的声明后使用a或b的作用相同,都代表同一变量。对变量声明一个引用,并不另开辟内存单元。函数参数传递有两种情况,有一般的将变量名作为参数,这时传递给形参的是变量的值,在执行函数的时候,...

c++引用,指针和一般变量在当做函数参数时的区别
引用就是给被引用变量起别名,其实是被引用变量本身,指针就是把存放变量的地址传过去了,这两个当参数传入时,对他们的修改都会影响到变量本身。一般变量就是最简单的值传递,就是把变量的值传过去了,变量本身没过去,所以对形参的修改,不会影响到变量本身。朋友,请【采纳答案】,您的采纳是我答题...

C++中引用与指针的区别
也就是说将指针作为参数进行传递时,事实上也是值传递,只不过传递的是地址。当把指针作为参数进行传递时,也是将实参的一个拷贝传递给形参,即上面程序main函数中的p何test函数中使用的p不是同一个变量,存储2个变量p的单元也不相同(只是2个p指向同一个存储单元),那么在test函数中对p进行修改,并...

C++指针、数组、引用、变量作函数参数的问题
2. 指针、数组作为参数,这是地址传递,指针和数组可以看成是指向一个或一片连续空间的指针(区别是:一个为变量地址,一个常量地址),它们传递的是所指数据或数据区的地址,这使得函数直接操作的就是原数据区的数据。好处是可以直接通过函数改变调用函数中的多个数据。如有函数声明:void swap(int *a...

C++指针和引用的区别
可能导致未定义行为。引用在传递大型数组到函数或作为函数参数时,可以避免复制数组,提高效率;指针则可能导致数据复制和内存问题。引用通常用于函数参数和返回值,以及作为对象的成员变量,使代码更简洁、更安全;指针在特定场景(如动态内存分配、低级编程等)下仍需使用,现代C++推荐使用智能指针。

c++ “数组可以通过值参数和引用参数两种方式传递给函数”的说法对否...
当然,C++那么牛B的,肯定支持数组的引用传递了 值传递:void fun(int arr[]);实际上传递的是数组的首地址指针;引用:void fun(int (&arr)[SIZE]);注意,方括号中的SIZE必须要写,而且在调用的时候必须用这个SIZE的数组,否则会出错;例如:void fun(int (&arr)[5]);在调用的时候传入的数组...

c++ 里面传递一个引用和传递一个指针有什么区别
★不同点:●指针是一个实体,而引用仅是个别名;●引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;●引用没有const,指针有const,const的指针不可变;(具体指没有int& const a这种形式,而const int& a是有 的, 前者指引用本身即别名不可以...

相似回答