【发布时间】:2020-03-15 21:04:01
【问题描述】:
对于下面的代码,为什么变量 x,y,s 是按值传递的,而只有 z 是按引用传递的。
void foo(int* a, int* b, int& c, int d) {
*a = *a + 1;
b = b + 1;
c = c + 1;
d = d + 1;
}
int main() {
int x = 0, y = 5, z = 10, s = 20;
foo(&x, &y, z, s);
cout << x << “, ” << y << “, ” << z <<“, ” << s <<endl;
return 0;
}
【问题讨论】:
-
查看
foo的参数类型。哪些是参考? -
哦,是因为在void foo中,只有c有&?
-
那么,在 main 中,foo(&x, &y) 是否通过引用调用并不重要?
-
是的,只有
c是参考。 (但foo不是“空”;它是一个函数,void是它的返回类型。) -
&仅在类型中表示“引用”。当它是表达式中的一元运算符时,例如&x,它是“address-of”运算符并且与引用完全无关。你不是通过引用传递x,而是传递&x- 这是一个int*- 按值传递。
标签: c++ pass-by-reference pass-by-value