我们有功能
int foo(int x)
{
return x;
}
int bar(int& x)
{
return x;
}
...
foo(5);//ok
bar(5);//error
我不明白,当我们打电话时会发生什么foo(5)
?内存中只分配了 4 个字节并传输到foo
? 或者在分配 4 个字节后将创建此存储单元的副本并传输到foo
?
我们有功能
int foo(int x)
{
return x;
}
int bar(int& x)
{
return x;
}
...
foo(5);//ok
bar(5);//error
我不明白,当我们打电话时会发生什么foo(5)
?内存中只分配了 4 个字节并传输到foo
? 或者在分配 4 个字节后将创建此存储单元的副本并传输到foo
?
功能栏将输入参数作为参考。这种用法的限制是在调用函数时不能将文字作为参数传递。
5是字面意思。您不能将文字或表达式作为引用传递。此外,您的两个函数都返回整数,但您没有捕获它们。
函数 foo 按值接受输入。因此,制作并处理了输入变量的副本。函数内部的变量和外部的调用变量在这里是两个不同的变量。
更多信息请参见http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
除了其他答案中给出的信息外,我建议使用谷歌搜索事物lvalue
和rvalue
.
此外,想象一下这行得通:
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"));
}
运行这个程序应该有什么效果?