const的意思是常量
const float PI=3.14; PI=3;//会报错,PI不可修改
注意
1,常量定义以后不能再继续赋值,所以在定义时最好顺便初始化。
2,常量不能赋值的确切意思是不能在编译过程中赋值,而不是说在运行过程中不能赋值。在运行过程中如果通过操作指针,同样可以对该变量赋值,但一般用不上这种操作,如下:通过该例子再体会一下指针直接修改内存的作用。
float* p=(float*)Π float input; cin>>input; *p=input
在调试过程中查看内存会发现PI的值改变为我们输入的input值
3,在控制台界面查看修改以后的PI
cout<可能会有点疑惑,PI的值明明在运行过程中已经改为了input的值,最后输出的PI仍然是3.14。实际上出现这种问题是因为编译器的优化措施导致的,在编译的时候const float PI=3.14就会将程序文件中的PI值全部都替换成3.14,就像C中的宏定义一样,而如果换下面的语句
cout<<*p<则会输出改变后的PI值了
二,const指针 引入问题char* p = "Hello,Word!";//该语句会显示编译错误——"const char*”类型的值不能用于初始化"char*”类型的实体下面去改正这个问题。
两种const指针 1,const关键字之后有*符号改正上面错误以后的语句如下:
const char* p = "Hello,Word!";或者
char const* p = "Hello,Word!";这两个语句中*符号都在const符号之后,他们的意思一样,都是指p指针指向的内容不可以发生修改,但是p指针本身的值可以发生改变,例如:
p[0]='a';//会报错,因为P指针指向的内容不可修改 p=nullptr;//正确,可以修改p指针本身的值2,const关键字之前有*符号该指针的书写方式如下:
char* const p = CharBuf;该指针的功能为可以修改指针指向的内容,但是不可以修改指针本身的值,可以看下面的例子。
char CharBuf[32] = "hello,world!"; char* const p = CharBuf; p[0] = 'D';//编译通过,说明该指针可以修改指针指向的内容 p = nullptr;//编译失败,说明不可以修改指针本身的值3,const关键字之前与之后都有*符号该指针的功能为——指针指向的内容与指针本身都不可以修改。例如:
char CharBuf[32] = "hello,world!"; const char* const p = CharBuf; p[0] = 'D';//报错,不可以修改指针指向的内容 p = nullptr;//报错,不可以修改指针本身的值编个口诀记忆这两种指针”康心内容,心康本身“
三,如何将const指针转换为普通类型的指针——const_cast
——如果是const *的顺序,是指指针指向的内容不可修改,如果是*const的顺序,是指指针本身不可修改。看下面语句
const int n=3; int *p=&n;//会报错,因为&n是const int *类型的,不可以直接转换为int*类型因此,现在面临的问题是将const int *类型的指针,转换为int类型——可以使用强制类型转换**
int*p=(int*)&n;//没有问题同样的功能,还有另外一种方法——使用const_cast;
int*p=const_cast(&n); const_cast会去掉const int *类型当中的const属性,虽然强制性类型转换能够达到同样的效果,但是推荐使用const_cast方法,因为该方法可读性更好,作用更加明确,这在开发中是很重要的。



