指针和L值引用

Pointers and LValue Reference

本文关键字:引用 指针      更新时间:2023-10-16

我有这种情况。

 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看起来有冲突吗?

第一种情况甚至不编译,因为您正在传递int*,但编译器希望引用int类型。

printInt(&i);

在上面的语句中,您正在传递一个整数的地址。因此,在接收端,它应该是一个指针。

编辑:

我想你混淆了指针和引用。将引用视为变量的别名。在某种程度上,类比就像是放在桌面上的应用程序的捷径。当您单击快捷方式时,您实际上正在运行安装在Applications目录中的可执行文件。因此,快捷方式更像是运行应用程序可执行文件的别名。

为一个应用程序设置的快捷方式可以用于打开不同的应用程序吗?不可以。由于类似的原因,无法重新密封引用。

情况1实际上是不正确的,它需要一个可引用的整数,但您为它提供了指向整数的指针。

第二种情况是正确的。当您通过引用将值int x传递给函数foo(int &y)时,您会写:

foo(x);

这就好像你说:

int &y = x;

在第一种情况下,您调用

foo(&x);

就好像你说:

int &y = &x;

引用不是这样定义的。