首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指针和LValue引用

指针和LValue引用
EN

Stack Overflow用户
提问于 2013-08-31 22:41:20
回答 3查看 175关注 0票数 0

我有这种情况。

代码语言:javascript
复制
 case 1
    void printInt(int & i) {}

    int main () {
       int i=1;
       printInt(&i);

    }

printInt需要一个引用,因此,在main中,我调用了printInt函数,并提供了引用i。这样做正确吗?

然后我也可以做

代码语言:javascript
复制
 case 2
     int main () {
       int i=1;
        printInt(i);    // i is a lvalue, and printInt function is expecting a lvalue

}

那么,第一种情况和第二种情况看起来是冲突的吗?

EN

回答 3

Stack Overflow用户

发布于 2013-08-31 22:42:55

第一种情况甚至不会编译,因为您传递的是int*,但是编译器需要引用int类型。

代码语言:javascript
复制
printInt(&i);

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

编辑:

我想你把指针和引用搞混了。可以将reference看作是变量的别名。在某种程度上,类比就像放置在桌面上的应用程序的快捷方式。单击快捷方式时,实际上是在运行安装在应用程序目录中的可执行文件。因此,快捷方式更像是运行应用程序可执行文件的别名。

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

票数 2
EN

Stack Overflow用户

发布于 2013-08-31 22:43:02

第一种情况实际上是不正确的,它需要一个可引用的整数,而你却给它提供了指向整数的指针。

票数 1
EN

Stack Overflow用户

发布于 2013-08-31 22:58:03

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

代码语言:javascript
复制
foo(x);

这就像你说的那样:

代码语言:javascript
复制
int &y = x;

在第一种情况下,您可以调用

代码语言:javascript
复制
foo(&x);

这就好像你说过:

代码语言:javascript
复制
int &y = &x;

这不是引用的定义方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18549330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档