首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ primer书上的一个小疑点

2013-11-29 
c++ primer书上的一个小问题书上有句话:Because references are not objects, they don’t haveaddresses.

c++ primer书上的一个小问题
书上有句话:
Because references are not objects, they don’t have
addresses. Hence, we may not define a pointer to a reference.
我的理解是因为引用不是一个对象所有引用没有地址,因此不能用引用定义一个
指针,那下面的代码怎么回事?我理解错了?

#include <iostream>
using namespace std;
int main()
{
int a=0;
int &b=a;
int *p1=&a;
int *p2=&b;   //这里应该会有错误把,怎么没错误
cout<<"*p1="<<*p1<<endl;
cout<<"*p2="<<*p2<<endl;
return 0;
}

[解决办法]
引用没有地址是指不会单独像一个变量一样给她分配地址,而是与所引用的变量公用一份内存。
[解决办法]
他的意思是,引用变量是特殊的变量,系统不会分配相应的地址。

普通变量和指针变量都是一种变量,都会有自己本身的地址,但引用却没有这个地址,他的地址和引用的对象相同。
[解决办法]
你的代码本身已经证明了这点,这两个地址应该是同一个:
#include <iostream>
using namespace std;
int main()
{
    int a=0;
    int &b=a;
    int *p1=&a;
    int *p2=&b;   //这里应该会有错误把,怎么没错误
    cout<<"p1="<<p1<<endl;//打印两者地址看看
    cout<<"p2="<<p2<<endl;
    return 0;
}

[解决办法]
当然没错误
引用以后b就代表a
所以int *p2=&b就是int *p2=&a
[解决办法]
我感觉还是你没理解好他那句话
他的意思不是说不允许定义指向引用的指针
而是无法(实现不了这样的事)定义指向引用的指针,即使你看上去是定义了指向引用的指针,
实际上定义的却是指向那个引用所引用的对象的指针,正如你上面的代码,
实践是真理,肯定是对的,看上去p1指向的是引用b,但是实际上编译器不是这样解释的
所以这应该是不允许和没办法的区别了

热点排行