调用函数时,函数形参和传入的两个实参之间是什么关系?
如果代表相同对象,那么如果Val1和Val2发生改变,Vec [ ix ]和Vec [ jx ]应该同时改变,但实际调用下段代码时并不会发生,他们之间唯一的联系就是拥有相同的值.
void Bubble_Sort( vector<int>Vec ) {
//...
if ( Vec[ ix ] > Vec [ jx ] )
Swap( Vec [ ix ], Vec [ jx ] );
}
void Swap( int Val1, int Val2 ) {
//...
...//
}
换句话来说,值传递只是将传入对象复制了一份,原对象和复制品之间没有了关联.
想要使得Swap()的参数和传入对象产生关联应该怎么办呢?
到了这里我们需要考虑的就是地址传递了,最简单的做法就是把我们的参数设置为一个reference(在类型名称和reference名称之间插入&,就是声明了一个reference),也就是将我们之前的Swap()函数修改为下:
void Swap( int & Val1, int & Val2 ) {
//...
...//
}
实现体中不需要任何修改,就可以将两者实现关联.