codecamp

C++ 按引用传递其他类型

不单是结构能按引用传递,所有其他我们见过的类型同样可以。例如,我们可以这么写,来交换两个整数:

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并不是一个变量---它并没有占据一个引用可以指向的地址。弄清楚什么类型的表达式可以传引用是一个小技巧。目前一个好的规则是引用参数必须是变量。

C++ 作为返回值的结构
C++ 获取用户输入
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }