指针和LValue参考

时间:2013-08-31 14:41:20

标签: c++

我有这种情况。

 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似乎有冲突吗?

3 个答案:

答案 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;

这不是引用的定义方式。