参考以下代码,我有一些疑问:
main() {
int i[10] ;
int * const&rp = i ;
cout<<rp<<" "<<i<<" "<<&i<<" "<<&rp<<endl ;
int a ; int &b = a ;
cout<<&a<<" "<<&b<<endl ;
}
以下是典型输出:
0xbff62298 0xbff62298 0xbff62298 0xbff622c0
0xbff622c4 0xbff622c4
现在我真正无法解释的是:
a
和b
的地址相同,即&a
和&b
返回相同的结果&i
和&rp
会返回不同的结果为什么会如此
答案 0 :(得分:4)
a
和b
的地址相同,即&a
和&b
返回相同的结果
引用不是对象。它没有地址。在引用上应用addressof运算符时,会要求提供引用对象的地址。由于b
引用a
,因此您获得的地址相同。
但
&i
和&rp
会返回不同的结果
这是因为rp
未引用数组i
。它引用了绑定引用时隐式创建的临时指针对象。
对数组的引用与C ++中的数组名称完全相同
也许不完全,但差不多。变量名和引用都是对象的别名。同样适用于所有类型的引用。