我有这种情况。
case 1
void printInt(int & i) {}
int main () {
int i=1;
printInt(&i);
}
printInt期待引用,因此,在main中,我调用printInt函数并提供引用i。这是对的。
然后我也可以
case 2
int main () {
int i=1;
printInt(i); // i is a lvalue, and printInt function is expecting a lvalue
}
那么,案例1和案例2似乎有冲突吗?
答案 0 :(得分:2)
第一种情况甚至没有编译,因为你传递的是int*
,但是编译器希望引用int
类型。
printInt(&i);
在上面的语句中,您传递的是整数的地址。所以,在接收端它应该是一个指针。
编辑:
我认为你在指针和引用之间感到困惑。将引用视为变量的别名。在某种程度上类比,就像放在桌面上的应用程序的捷径。单击快捷方式时,实际上是在运行Applications目录中安装的可执行文件。因此,快捷方式更像是运行应用程序可执行文件的别名。
可以使用一个应用程序的捷径来打开不同的应用程序吗?不可以。出于类似的原因,不能重新引用参考文献。
答案 1 :(得分:1)
情况1实际上是不正确的,它期望一个可引用的整数,但是你正在为它提供指向整数的指针。
答案 2 :(得分:0)
第二种情况是正确的。当您通过引用将值int x
传递给函数foo(int &y)
时,您会写:
foo(x);
这就像你说的那样:
int &y = x;
在第一种情况下,你打电话
foo(&x);
就像你说的那样:
int &y = &x;
这不是引用的定义方式。