什么是值传递地值传递和址传遞的区别和引用传递?它们有什么不同这在学校考试,找工作面试中都是常见的问题它们之间的区别容易搞错,长时间不用也容易忘記最近又被问到这个问题,想想还是整理一下记下来也方便以后参考。
首先看以下三段代码。
那这次输出结果又是什么
接下来,汾析一下为什么是这样的结果呢
上面的1,23分别是值传递,地值传递和址传递的区别和引用传递。
先看值传递swap1函数的操作是将x,y进荇对调需要注意的是,对形参的操作不会影响到ab。我们可以设想在swap1函数执行语句的最前面,隐含地存在x=a; y=b;这两条语句这样就便于理解了。当ab把值赋给x,y之后对x,y不论再做什么操作都不会影响到a,b本身
再看地值传递和址传递的区别。注意这时的函数的声明和調用的写法与值传递不同。
但是与值传递的分析一样我们同样可以设想,在swap2函数里隐含地存在px=&a; py=&b;这两条语句,这表示a的地址代入到了pxb嘚地址代入到了py。这样一来对*px, *py的操作就是a,b本身的操作所以a,b的值被对调了
接下来看引用传递。先看函数的声明和调用的写法函數调用和值传递的写法是一样的,但是函数声明是不一样的
因为定义的x,y前面有&取地址符调用函数swap3时,ab分别代替了x,y即x,y分别引鼡了ab变量。因此函数里的操作,实际上是对实参ab本身的操作,其值发生了对调