const int *&p=&a;//错误
int *const &p=&a;//正确
请问这两个语句为什么一个正确一个错误???
第一个袭裂是常量指针,第二个是指针常量
第一个在使用散禅卖之前 a必须是具体是实体,也就是所他必须有值,因为const修饰的是a,就像你在定义const int a=3一样 必须要给a赋值,
而第二个定义的是指针常量,也就是所const修饰的是p指针,不冲逗能修改指针值
举个例子:
int a=78;
int b=26;
int c=30;
const int *p=&a;
int *const s=&b;
*p=70; //错,常量指针不能修改指向的实体,*p只能作右值
p=&c; //ok,常量指针可以修改指针值
*s=70;//ok,指针常量可以修改指向的实体
s=&c;//错,指针常量不能修改指针值,即使用同一个地址
我试过了一下。
先说说 int *const &p=&a;//正确
这个语句的意思是: 声明一个指针引用,并且不能改变这个指针所指向的地址。按照从右向左读。
p是一个const引用,它的类型为int *,是一个指针。
把一个地址赋给一个指针引用,合法。
const int *&p=&a;//错误
这个呢,编译器可渣孙改能凯陪会认为p的类型是const int*&当从一个如判地址(或指针)转向它时,类型不匹配,无法转换。
第一个的错误虚蚂的原因:我想你可能还没理解指针的意旅辩思,指针是没有值,当然也就是说没有地址,而你定义的指针却用&,所以当然错.
第二个错误的原因:我想你看了第一个肯定想拆誉缺问那为什么第二个对呢?第二的意思是先把a的地址给p然后在定义成指针.
谢谢采纳
前面迷糊了悉岩腔... 常引用可以引枣皮用右值 但是睁衫const int *&p是常指针的引用...
const int *&p和int const *&p一样 都是const *而不是const &
const 要放在int 后面
