对数组的引用与C ++中的数组名称完全相同

时间:2016-07-17 10:10:30

标签: c++ arrays

参考以下代码,我有一些疑问:

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

现在我真正无法解释的是:

  1. ab的地址相同,即&a&b返回相同的结果
  2. &i&rp会返回不同的结果
  3. 为什么会如此

1 个答案:

答案 0 :(得分:4)

  

ab的地址相同,即&a&b返回相同的结果

引用不是对象。它没有地址。在引用上应用addressof运算符时,会要求提供引用对象的地址。由于b引用a,因此您获得的地址相同。

  

&i&rp会返回不同的结果

这是因为rp未引用数组i。它引用了绑定引用时隐式创建的临时指针对象。

  

对数组的引用与C ++中的数组名称完全相同

也许不完全,但差不多。变量名和引用都是对象的别名。同样适用于所有类型的引用。