const只是个限定符,用来表示这个符号不能赋值,意思为“只读的”!
例:
const int limit = 10; // limit不能被赋值,为只读的,始终为10;
【深入了解 const】
const int *p = &limit; // 我们定义了一个指向【整形常量】的指针p;
int i = 27; // 定义一个整形变量i,初值为27;
p = &i; // 将i的地址赋值给p,
-----------注意------------
此时p,可以赋值了,*p 值为 27了,这是为什么?
因为const int *p = &limit;只是限定了p指向的【整形常量】,这个常量是不能改变的,
即,*p =27; 这条语句是不合法的,因为*p是不能改变的,但是指针p的值是可以改变的.
(vs2008报错为:1>d:/visual studio 2008/projects/dely/dely/delydlg.cpp(193) : error C3892: “p”: 不能给常量赋值)
那如果限定指针不能改变,应该如何使用const?
int* const p = &limit; // 这条语句也错了,
原因:p的意思,p是一个常量指针,p是指向int型。如果把地址&limit【存放const int型变量】赋值给他,类型不匹配,报错。。
要如何修改,方法有二:
1: 将limit 定义为int型,如:
int limit = 10;
int* const p = &limit;
2:limit不变,将p定义为指向const int型的指针,const int* const p = &limit;
我们按照第一条修改,这个时候 使用p = &i;这条赋值语句就不合法了,因为我们限定了p为只读的。。。
而 *p = 27 是正确的,哈哈这下明白了吧
--------简便方法-----
其实呢,我们可以吧const 放在想要限定的符号的后面,学习起来就简单多了,例如
const int limit = 10;等效于 int const limit = 10 // const 限定limit为int常量,
const int* p 等效于 int const * p // const 限定指向*p的为常量,p 可以改变;
int* const p // const 限定指向int的指针为只读,*p 可以改变;
原文地址:http://hi.baidu.com/cai_song/blog/item/63fb72ab641879f5faed5047.html