通过引用和价值传递

时间:2013-10-17 06:03:31

标签: c++ function parameter-passing

我们有功能

int foo(int x)
{
    return x;
}
int bar(int& x)
{
    return x;
}
...
foo(5);//ok
bar(5);//error

我不明白,当我们打电话给foo(5)时会发生什么?内存中只分配了4个字节并传输到foo?或者在分配4个字节后,将创建此存储单元的副本并传输到foo

2 个答案:

答案 0 :(得分:4)

功能栏将输入参数作为参考。这种用法的限制是在调用函数时不能将文字作为参数传递。

5是字面意思。您不能将文字或表达式作为参考传递。而且,你的函数都返回整数,但你没有捕获它们。

函数foo按值输入。因此,输入变量的副本被制作和处理。函数内部的变量和外部的调用变量是2个不同的变量。

可在http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

查看更多信息

答案 1 :(得分:1)

除了在其他答案中提供的信息之外,我建议使用Google lvaluervalue来搜索。

此外,想象一下这个有效:

void bar(int& x)
{
  x = 6; // modify the referenced value, not some local variable!
}

main() {
  int y = 6;
  bar(5);

  printf ("equal or not: %s\n", (y==6?"yes":"no"));
}

运行此程序会产生什么影响?