C++中使用指针、引用进行参数传递
如图1中在swap函数里进值交换后传回main函数中还是未交换状态,而使用指针(图2)或引用(图3)就可以成功换值了。为什么呢?菜鸟求高手讲解一下电脑在编译时是怎样运算的...
如图1中在swap函数里进值交换后传回main函数中还是未交换状态,而使用指针(图2)或引用(图3)就可以成功换值了。
为什么呢?菜鸟求高手讲解一下电脑在编译时是怎样运算的啊? 展开
为什么呢?菜鸟求高手讲解一下电脑在编译时是怎样运算的啊? 展开
7个回答
展开全部
这是经典的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、常规情况
函数参数传递是所谓的“值传递”。啥意思,就是传的只是值,而不是变量自己以身相许。上面的例子来说,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是独立的四个变量
展开全部
c++中函数传值有两种方式,一种是传值,还有就是传递引用(指针)。
传值实际上是把实参的值拷贝过去,所以对原来的值没有影响。
而传递指针虽然也是拷贝过去(拷贝的是指针值,不是拷贝指针指向的数,你会发现传递指针的话形参实际上是实参的地址,和直接传值方式形参是不一样的),但是你赋值后会把指针指向的值给替换。你会发现你仅仅想改变指针本身的值还是做不到的,但是这样你可以改变指针指向的值了,而改变不了指针本身其实就和第一个例子一样的道理,因为传递的是拷贝过去的指针值,如果你想改变指针本身的话,就要传递二级指针。
所以在c++里边提倡用引用代替指针作为形参,用引用代码简洁易懂,不容易出错。引用可以理解为实参的别名,你改变它就会改变实参的值。可以把引用理解为const指针。
传值实际上是把实参的值拷贝过去,所以对原来的值没有影响。
而传递指针虽然也是拷贝过去(拷贝的是指针值,不是拷贝指针指向的数,你会发现传递指针的话形参实际上是实参的地址,和直接传值方式形参是不一样的),但是你赋值后会把指针指向的值给替换。你会发现你仅仅想改变指针本身的值还是做不到的,但是这样你可以改变指针指向的值了,而改变不了指针本身其实就和第一个例子一样的道理,因为传递的是拷贝过去的指针值,如果你想改变指针本身的话,就要传递二级指针。
所以在c++里边提倡用引用代替指针作为形参,用引用代码简洁易懂,不容易出错。引用可以理解为实参的别名,你改变它就会改变实参的值。可以把引用理解为const指针。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
传普通数值到函数中,函数对形参进行改变不会影响到主函数中的数据
传指针方式,并且通过指针变量对指针所指的地址中的内容进行改变时,会同时改变主函数中的实参所对应的数据, ( 但如果改的只是指针变量本身的值,则没有影响!! )
引用方式相当于给实参取了个别名,操作哪个变量都相当于操作实参,所以,一变都变。
传指针方式,并且通过指针变量对指针所指的地址中的内容进行改变时,会同时改变主函数中的实参所对应的数据, ( 但如果改的只是指针变量本身的值,则没有影响!! )
引用方式相当于给实参取了个别名,操作哪个变量都相当于操作实参,所以,一变都变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
形参值的改变不会引起实参改变,引用和指针可以改变实参的值。这么说能懂吗?也就是第一个中,改变的仅仅是swap函数里的a和b,并没有改变主函数下的a和b。第二个和第三个,使用了指针和引用,都改变了原来主函数的a和b。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一张图,你只是传入一个参数,只是一个值,就是在main函数里定义的,在swap函数里面是有进行参值的改变,而函数结束后,参形并不能改变实参,所以值没有变。你第二和第三张,传入的是两个实参的地址,把地址里的内容进行交换,就是两个值,而改变后的值在放入地址里面,所以有改变值。简单点讲就是第一张只是值的改变,但地址的内容没变,第二第三直接是地址里的内容进行改变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询