不单是结构能按引用传递,所有其他我们见过的类型同样可以。例如,我们可以这么写,来交换两个整数:
void swap (int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
用普通方式调用这个函数:
int i = 7;
int j = 9;
swap (i, j);
cout << i << j << endl;
程序输出97。你可以为程序画出栈图来说服自己这是正确的。如果参数x和y声明为普通参数(没有加上&符号),则swap函数无效。它会修改x和y,而对i和j没有影响。
当人们开始通过引用传递东西,例如整型时,他们经常试图使用表达式作为引用参数。如:
int i = 7;
int j = 9;
swap (i, j+1); //错误!
这是不合法的,因为表达式j+1并不是一个变量---它并没有占据一个引用可以指向的地址。弄清楚什么类型的表达式可以传引用是一个小技巧。目前一个好的规则是引用参数必须是变量。