const修改的变量是不能被修改的,也就是const用来定义常量。
const常量必须要被初始化。
int const a=3; //等价于const int a=3;
const int a=3;
int const *p = &a; //等价于const int *p=&a;
const int *p = &a; //常量指针 *p不可修改 *p = 8;(错误)
p可以修改 p = &b;(正确)
int * const p = &a; //指针常量 *p可以修改 *p = 8;(正确)
p不可修改 p++ ; (错误)
const int * const p = &a; // *p 和 p均不可改变
const的定义
例1:
int main(){
int const a=23; //正确
const int b=23; //正确。等价于int const b=23;
int const a; //错误,const常量必须要被初始化。
}
例2:
int main(){
int const a=3;
a=4; //错误。a的值不能再被修改。const常量是不能被修改的。
}
例3:
int main(){
int a=3;
int const b=a;
a=4; //正确。b只是使用了a的值进行初始化。a仍然是普通变量。
b=4; //错误。b为const常量。
}
const 与#define的比较
例4:define 与const的比较
#define MAX 30 //发生时机:预编译时。简单的字符串替换,不具备类型检查功能。有可能会把错误带到运行时
int main(){
const int a=30; //发生时机:编译时。具有类型检查的功能。如果是要使用常量,推荐使用const关键字
}
常量指针与指针常量
例1:常量指针:指向常量的指针
int main(){
int a=4;
const int *p=&a; //p指向a。等价于int const *p=&a;
*p =5; //错误。const的作用是p指向的值不能被修改(即不能通过指针来改变变量的值),但是指针的值可以 改变(即可以指向其他变量)。
}
例2:
int main(){
int a=4;
const int *p=&a; //定义常量指针。首先p指向a
int b=5;
p=&b; //然后p指向b,这是可以的。
cout << "*p=" << *p <<endl; //输出:*p=5
}
例3:
int main(){
int a=4;
int * const p=&a; //定义指针常量。p所指向的变量的值是可以被修改的。但是p指针本身的值是不能被修改的。(即, 指针只能指向这个变量,不能再指向其他变量)
*p=5; //正确。
cout << "*p=" << *p <<endl; //输出5
}
例4:
int main(){
int a=4;
int * const p=&a;
int b=5;
p=&b; //错误。指针常量不能修改指针的值。
}
例5:
int main(){
int a=4;
const int * const p=&4; //p指向的对象不能改,p本身的值也不能被修改。
}