0

我有这种情况。

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

4

3 回答 3

2

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

printInt(&i);

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

编辑:

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

可以使用为一个应用程序放置的快捷方式打开不同的应用程序吗?不可以。出于类似的原因,不能重新安装引用。

于 2013-08-31T14:42:54.897 回答
1

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

于 2013-08-31T14:43:02.300 回答
0

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

foo(x);

这就好像你说:

int &y = x;

在第一种情况下,您致电

foo(&x);

就好像你说:

int &y = &x;

这不是定义引用的方式。

于 2013-08-31T14:58:03.067 回答