1.修饰局部变量
const int a = 1;int const a = 1;
这两种是一样的
注意:
const int b;
该情况下编译器会报错:常量变量"b”需要初始值设定项
将一个变量没有赋初始值直接const修饰后,在以后时无法更改内容的。
2.修饰常量字符串
a.直接更改str指向的内容
const char* str = "abcdef";a.直接更改str指向的内容const char* ptr = "EMO";cout << "str:" << str << endl;str = ptr;cout << "str:" << str << endl;
可以直接修改常量字符串的指针变量(这里指str,ptr)
b.修改指针变量里的内容
const char* str = "abcdef";*str = 'A';cout << "str:" << str << endl;
报错:
E0137表达式必须是可修改的左值
C3892"str”:不能给常量赋值
说明指针变量指向的内容是被const修饰了变成常量了(右值),而指针变量并未被修饰依旧可以改变
3.常量指针与指针常量
定义区分:
1.常量指针:针指向的内容是常量2.指针常量:指针本身是个常量,不能在指向其他的地址
a.常量指针
两种形式
const int* pa1 ;int const* pa2 ;
理解:
先理解int* pa1(单纯理解记忆)
所以常量指针不能通过该指针去修改指针所指内容
a.通过const修饰的指针修改a*pa1 = 2;
但是不通过该指针变量去修改,原变量可以修改时,也可以通过别的方式修改:
b.直接修改a = 2;cout << "修改后a:" << a << endl;
b.指针常量
基本形式
int* const n;//及时给初始值,类似上述局部变量中const int b;
理解:
此时的const直接修饰该指针变量,所以指针常量是指针本身是个常量不能在指向其他的地址
int a = 1;int b = 2;int* const pa1 = &a;pa1 = &b;//报错E0137表达式必须是可修改的左值
但是可以通过const指针去修改内面内容
cout << *pa1 << endl;*pa1 = 3;cout << *pa1 << endl;
结果: