c++指针引用

来源:百度知道 编辑:UC知道 时间:2024/05/21 01:30:33
int a;
const int *&p=&a;//错误
int *const &p=&a;//正确
请问这两个语句为什么一个正确一个错误???

第一个是“指向常量的指针”,*&p是常量,不能作为左值。
第二个是“常量指针”,*const &p是个指针,可以作为左值。

const int *这是指向常量的指针的意思 而T(代表某类型)& 表示的是该类型的一个引用 那么这个语句的意思就明白了:指向常量的指针的引用,p代表一个指向常量的指针的引用(别名),而要明白&a是一个具有固定地址也就是常指针的量而不是指向常量的的量,因为&a内的数据也就是int a是可以变得;
int *const代表常量指针 而&p后说明p是给常指针&a定义一个别名p
这样就对了...

前面迷糊了... 常引用可以引用右值 但是const int *&p是常指针的引用...

const int *&p和int const *&p一样 都是const *而不是const &

我试过了一下。
先说说 int *const &p=&a;//正确
这个语句的意思是: 声明一个指针引用,并且不能改变这个指针所指向的地址。按照从右向左读。
p是一个const引用,它的类型为int *,是一个指针。
把一个地址赋给一个指针引用,合法。

const int *&p=&a;//错误
这个呢,编译器可能会认为p的类型是const int*&当从一个地址(或指针)转向它时,类型不匹配,无法转换。

第一个的错误的原因:我想你可能还没理解指针的意思,指针是没有值,当然也就是说没有地址,而你定义的指针却用&,所以当然错.
第二个错误的原因:我想你看了第一个肯定想问那为什么第二个对呢?第二的意思是先把a的地址给p然后在定义成指针.
谢谢采纳

第一个是常量指针,第二个是指针常量
第一个在使用之前 a必须是具体是实体,也就是所他必须有值,因为const修饰的是a,就像你在定义const int a=3一样 必须要给a赋值,
而第二个定义的是指针常量,也就是所const修饰的是p指针,不能修改指针值
举个例子:
int a=78;
int b=26;
int c=30;
const int *p=