C++指针和常量的问题
const int a =10;int* p =0 ;
p = &a;//为什么这句编译不通过??
追问:int * const p 和int const *p 是什么意思?其他的我明白
const int a =10;int* p =0 ;
p = &a;//为什么这句编译不通过??
追问:int * const p 和int const *p 是什么意思?其他的我明白
答案:int *p = 0; 这个应该有为指针p本身分配内存,只不过是指针p所指的内存地址比较特殊。
code:
const int a =10;
int* p =0 ;
p = &a;//
试想一下, a用const修饰,表明了a的值是不可改变的常量, 按照你定义的指针p指向对象a的话,就算是编译器接受你的错误,让你编译通过了,那试问,是不是可以通过指针p修改a的值,那是不是违背了你最初定义常量a的初衷? 你需要搞明白 int *p , const int* p , int const *p,当然还有 int* const p的区别
最前面打个#就OKconst int* p =0 ;a是个常量,所以如果p要引用a的话,也应该是个常量指才行。即定义指针p:“const int* p;”才行。指向常量的指针定义时要定义成常量指针。当用const定义一个变量时就限定该变量的值是不允许被改变,即a的值为8是不能改变的。当你定义一个指针指向a时,(指针是程序万恶之源)能通过间访去改变其指向的值。如果指针前面不加const说明的话,也就是不声明该指针是指向一个不能改变其值的常量的话,就说明能通过指针间接去改变a的值,这和本意就相矛盾了。所以编译这一关就通不过了。。说到底,这就是一个类型匹派的问题,即使将指针改成引用这问题一样存在。编译通不过是因为 int *p=0;
你没有为指针P分配内存当然不能通过,const 定义的a的值只有在于指针一起是才可以改变,否则一般情况下不可改变。
上一个:C++编程老是错错错!!!!
下一个:C++是干什么用的软件?