栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++易错知识点笔记(一)const关键字

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++易错知识点笔记(一)const关键字

一,const常量

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的顺序,是指指针本身不可修改。

三,如何将const指针转换为普通类型的指针——const_cast

看下面语句

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方法,因为该方法可读性更好,作用更加明确,这在开发中是很重要的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/690703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号