【发布时间】:2012-07-26 01:55:03
【问题描述】:
阅读pointers和references之间的很多差异。
以下是我所学内容的简要说明。
1。定义指针时分配内存。但是,引用是名称别名,因此没有为其分配内存(Is it correct?)。
2。引用必须在定义时被初始化,因为引用是用一个常量指针实现的,因此不能指向另一个对象。 然而,指针不需要在定义时初始化,因此也可以更改为指向其他对象。
3。引用会自动取消引用。当你写cout << p;
它被编译器自动取消引用并被视为cout << *p;由编译器。
这里,p 是参考。
-
对引用的引用是不可能的。每当您声明对引用的引用时,它实际上是对同一变量的引用。 例如
int i; int &r1=i; int &r2=r1; <-------------------2
编译器将语句 2 解释为:
整数 &r2=(*r1)
而 (*r1) 只不过是变量 i 本身。
然而,指向指针的指针是可能的。
5。指针数组是可能的,而引用数组是不可能的(为什么?)。
6。指针的地址是可能的。参考地址是不可能的。它给出了变量的地址。
7。在某些情况下,您必须使用引用。您不能在那里使用指针。 考虑下面的例子:
A a=b+c;
其中 a,b,c 是 A 类的对象。 运算符“+”重载如下:
const A& operator+(const A& o)
{
return A(i+o.i);
}
在此处查看示例代码:http://ideone.com/Q0pE1
这里参数列表中的引用用于保存内存占用。
您不能在参数列表中使用指针,因为您必须在运算符函数中传递对象的地址。
A a=&b + &c;
但是,如果在参数列表中使用了指针,那么我们最终将添加地址而不是对象本身。
我想知道我还有什么遗漏的吗?
什么时候需要指针,什么时候需要参考?
【问题讨论】:
-
“但是,引用是名称别名,因此没有分配内存”--“引用是用常量指针实现的”--看到矛盾了吗? ;)
-
这些观点有很多错误,以至于任何答案基本上都可以解释指针和引用是什么。
-
当你使用指针和引用时,它不是一个或另一个;他们一起工作。在某些情况下,您可能只使用其中一种,但通常情况下,您会同时使用它们。
-
"指针地址是可能的。引用地址是不可能的。它给出了变量的地址。"在这两种情况下,您都会获得变量的地址。
-
一般来说,使用引用,除非您需要一种方法来指向空(null)或者如果您遇到无法使用引用的情况。引用清楚地表明 null 是不可能的。
标签: c++