初级理解:
const是定义常量,const意味着只读。
含义:
int main()
{
const int a; //
int const b;
const char *c;
char * const d; char buf[100]
const char * const e ;
return 0;
}
Int func1(const )
//第一个和第二个意思一样,代表一个常整型数。
//第三个c是一个指向整形的指针(所指向的内存数据不能被修改但是本身可以被修改)。
//第四个d为常指针(指针变量不能被修改但是它所指向的内存空间可以被修改)
//第五个一个指向常整型的常指针(指针和它所指向的内存空间都不能被修改)
《Effective C++》中关于const的描述更加总结更到位。
char greeting[]="Hello";
char *p=greeting;//non-const pointer,non-const data;
const char *p=greeting;//non-const pointer,const data;
char * const p = greeting;//const pointer, non-const data;
const char * const p = greeting;//const pointer ,const data;
const 语法虽然变化多端,但并不是莫测高深,如果关键字const出现在*左边,表示被指物是常量;
如果出现在*号右边,表示指针自身是常量;如果出现在俩边表示被指物和指针都是常量。
一个例子
const int max = 10;//只读变量不能修改。
int *p = &max;//编译不能通过,因为编译认为你可能通过指针修改max的值。
int a = 10;
const int *p = &a;//约束指针p指向的变量不能被修改。
int *s = p;//不可以,能力扩展了,可以通过s修改a的值
const int *s = p;//可以
int * const s = p;//不可以,const 修饰的只是指针s本身不能被修改,但是s指向的变量可以被改变。能力扩展了,可以通过s修改a的值
const int * const s = p;//可以
int a = 10;
int * const p = &a;//指针p本身的值不能被修改
int *s = p;//可以,因为这个定义只说明可以通过s修改a的值,p的值并不会因为s而改变。
const int *s = p//变量不能被修改,和p没啥关系,只是将p的值赋给了s
int * const s = p; //指针s本身的值不能被修改,和p也没啥关系
const int * const s = p;//常指针指向的常变量,和p没啥关系