参考了Essential C++,
对于函数的形参有两种传参方式,即,按值传递和按址传递;
按址传递可以通过指针(pointer)和引用(reference)的方式传递,效果相同,但用法不同。
可通过下面冒泡排序的例子来理解:
#include <iostream>
#include <vector>
using namespace std;
/*交换两个数值*/
void swap (int &val1, int &val2){
int temp;
temp = val1;
val1 = val2;
val2 = temp;
}
/*通过指针传参*/
void bubble_pass_by_pointer (vector<int> *vec){
for (int i = 0; i < vec->size(); i++){
for (int j = i+1; j < vec->size(); j++){
if ((*vec)[i] > (*vec)[j])
swap((*vec)[i], (*vec)[j]);
}
}
}
/*通过引用传参*/
void bubble_pass_by_reference(vector<int> &vec){
for (int i = 0; i < vec.size(); i++){
for (int j = i+1; j < vec.size(); j++){
if (vec[i] > vec[j])
swap(vec[i], vec[j]);
}
}
}
void display(vector<int> vec){
for (int i = 0; i < vec.size(); i++){
cout << vec[i] << " ";
}
cout << endl;
}
int main(){
int a[10] = {9, 2, 12, 23, 1, 4, 5, 6, 90, 3};
vector<int> vec(a, a+10);
//vector<int> *vec_pointer = &vec;
//bubble_pass_by_pointer(vec_pointer);
bubble_pass_by_reference(vec);
display(vec);
}