【问题标题】:Why is x and y pass-by-value, not reference for the code below?为什么 x 和 y 是值传递,而不是下面代码的参考?
【发布时间】: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 是它的返回类型。)
  • &amp; 仅在类型中表示“引用”。当它是表达式中的一元运算符时,例如&amp;x,它是“address-of”运算符并且与引用完全无关。你不是通过引用传递x,而是传递&amp;x - 这是一个int* - 按值传递。

标签: c++ pass-by-reference pass-by-value


【解决方案1】:

在函数foo()中ab是指针,即它们将获取变量的地址,并在函数调用中传递x和y的地址。但是 c 引用了提供的参数。 可以看C程序例子here on geeksforgeeks

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2014-05-27
    • 1970-01-01
    • 2019-07-27
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多