我有这种情况。
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
}那么,第一种情况和第二种情况看起来是冲突的吗?
发布于 2013-08-31 22:42:55
第一种情况甚至不会编译,因为您传递的是int*,但是编译器需要引用int类型。
printInt(&i);在上面的语句中,您正在传递一个整数的地址。因此,在接收端,它应该是一个指针。
编辑:
我想你把指针和引用搞混了。可以将reference看作是变量的别名。在某种程度上,类比就像放置在桌面上的应用程序的快捷方式。单击快捷方式时,实际上是在运行安装在应用程序目录中的可执行文件。因此,快捷方式更像是运行应用程序可执行文件的别名。
是否可以使用一个应用程序的快捷方式打开不同的应用程序?不是的。出于类似的原因,引用不能重新放置。
发布于 2013-08-31 22:43:02
第一种情况实际上是不正确的,它需要一个可引用的整数,而你却给它提供了指向整数的指针。
发布于 2013-08-31 22:58:03
第二种情况是正确的。当您通过引用将值int x传递给函数foo(int &y)时,您可以这样写:
foo(x);这就像你说的那样:
int &y = x;在第一种情况下,您可以调用
foo(&x);这就好像你说过:
int &y = &x;这不是引用的定义方式。
https://stackoverflow.com/questions/18549330
复制相似问题