话不多说,先上图片:
1
23
众所周知,图2是一个经典的形参和实参传递问题,对于函数swap而言,在main函数里面,我们将a,b两个值复制进入到栈里面,而不是直接使用a,b两个值进行操作,在栈里面的交换,只交换了两个形参的值,而对实参没有任何影响,如图示:
而对于图1,我们在函数里面交换地址会如何呢,结果和图1一样,只是将a,b的地址复制到栈里面去了,a和b的实际地址并没有发生任何改变,所以对应的a,b的值并没有发生任何改变。
再看图3,我们将a,b的地址复制到栈里面,而对应这个地址的值只有相应的a,b,所以在函数里面改变的是对应地址下的值,所以做到了数值的交换。