文章目录

  • 概述
  • const char* 和char* const
  • define 和 const

概述

关键字const一般用来修饰定义常量。使用const修饰的变量就不能被更改了。这是因为在编译时,编译器不会为被const修饰了的变量分配储存空间。而是直接保存在符号表中。这样在使用const修饰的变量时,也没有了保存和访问内存的操作。效率也会更高一点点。
这就是const关键字的大体上的作用。
一般来说我们定义的变量用const修饰是没有区别的,例如

int const a=2;
const int b=2;

这里的a和b都是一个用const修饰的int型变量。拥有常量的性质。我们接下来就称为“常变量”。

const char* 和char* const

当然,我们平时需要读代码时,遇到的就不仅仅是简单的用const修饰变量的。
但是面对const修饰的变量时,我们只需要记住:const一直修饰于左边的东西,如果左边没有可以修饰的东西,才会修饰在右边。

例如:

const char* a// const只有右边有可修饰的内容
//所以const修饰最近的char 然后*又修饰于(const char)整体
//所以这是一个指针,指向一个“const char”char* const b//const会修饰左边的内容
//所以const修饰最近的*, 这个指针是一个字符指针
//所以这是一个const修饰的指针,指向一个char/*这两者的区别在于:
a是可以指向另一块内存的,但是内存里保存的内容是不可修改的。
b是一个不可修改的指针,只能指向确定的一个内存,
但是这个内存里的内容是可以修改的。
*/

const的修饰规则大概就是这样的。所以我们平时写代码时,注意一下这样的规则,将尽量将const写在需要修饰的内容的右边,这样会让代码的可读性变得更好。符合这个规则的定义可以直接无脑从右往左读。
例如:

int* const// 一个const指针指向int
int const*// 一个指针指向const int
int const * const//一个const 指针指向const int
int *const *//一个指针指向一个const 指针
//这个cosnt 指针指向一个int

define 和 const

简单来说,define是宏定义。会在预处理阶段进行替换,例如我们写了这样的一行:

#define TYPE int

在预处理时,编译器会把代码中的所有TYPE替换为int。
相信大家也都听过如果需要的话尽量使用const。
所以我们来直接说使用define的不足。

  • 使用define定义的宏因为只是简单的替换,时没有类型检查的。
  • 也是因为define在预处理阶段就做了替换,所以是无法进行调试的。
    这是define的缺点,也就是const的优点。因为const修饰的常变量是有具体的类型的。所以会进行严格的类型检查。同时也能保护被修饰的变量不会被串改。

define也可以定义一些宏函数。虽然在编写时提供了一些方便。但是宏函数也是会在使用的地方进行展开。如果不仔细的话很容易出现一些不容易被发现的错误。
C++中有内联函数可以使用。所以大家就都会说尽量不要使用define。

关键字const——const char*和char* const相关推荐

  1. const char * 和 char const * 和 char * const 区别

    我们都用过const 修饰符修饰一个变量,而且我们知道使用const修饰之后,这个变量相当于常量了,他的值在代码其他部分不能再修改,这对于函数调用时候,防止错误的修改原本不应修改的变量起到很大作用,举 ...

  2. 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const

    原文网址:http://www.cnblogs.com/rushuizhijing/archive/2011/08/26/2154737.html 深入理解const char*p,char cons ...

  3. const char*p,char const*p,char *const p

    转自 http://blog.csdn.net/todd911/article/details/7911995 const char*, char const*, char*const的区别问题几乎是 ...

  4. 如何将std :: string转换为const char *或char *?

    如何将<code>std::string转换为char*或const char* ? #1楼 看看这个: string str1("stackoverflow"); c ...

  5. const char * 、char const *、 char * const 三者的区别

    一.const char *ptr; 定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改.但是 ...

  6. const char *p,char const *p, char * const p之间的区别

    const char * p 和 char const * p 是一个意思,都是p所指向的变量的值不能改变,例如: const char ch = 'a'; const char* p = & ...

  7. [error] MFC错误不能将参数1从const char [3]转换为const wchar_t *

    在做项目中经常遇到很多错误,这里我仅仅把自己遇到的一些错误和解决方法写出,供自己和大家查看. 代码如下: CRect rect; GetClientRect(&rect); CString s ...

  8. [c++基础] const char and static const char

    部分内容摘自:https://blog.csdn.net/ranhui_xia/article/details/32696669 The version with const char * will ...

  9. MFC开发- string、const char*、 char* 、char[]相互转换(全)

    string.const char*. char* .char[]四者类型经常会需要转化. 一:转化总结形式如下: 使用时,要对源格式和目标格式进行初始化.源格式赋值为具体的内容,目标格式赋值为空. ...

最新文章

  1. Java按空白部分切分图片
  2. 走近分形与混沌(part12)--随机过程与混沌
  3. 2014-08-26 遇到的小问题
  4. Python工具整合,为程序员和新手准备的 8 大 Python 工具
  5. 指令脚本redis线上环境监控脚本(python脚本)
  6. X波段雷达对海探测试验与数据获取
  7. 五款APP让你告别拖延症!余生愿你活成自己想要的样子
  8. 无锡学python_无锡python基础编程好学吗
  9. 光线追踪(RayTracing)算法
  10. MATLAB画立体包络图
  11. Linux配置Redis主从
  12. 尚医通(九)数据字典模块前后端 | EasyExcel
  13. Pt100转RS-485,热电阻温度Modbus数据采集模块 WJ125
  14. 03.fourier transform(傅立叶变换)
  15. honeycomb react脚手架-部署~
  16. 5G核心网之SBA架构(面向服务)
  17. 关于更新win11 22H2后透明任务栏失效的解决方法.2023.03.15
  18. 清华大学镜像及其他镜像
  19. staruml 试用_starUML和argoUML的对比
  20. 医学图像处理领域期刊和会议

热门文章

  1. 2022年焊工(初级)考试模拟100题模拟考试平台操作
  2. VMware Harbor学习
  3. leetcode_middle_2_406. Queue Reconstruction by Height
  4. 单片机开发和嵌入式开发流程图
  5. UE4网络编程学习之路02----网络架构、通信
  6. 公共艺术与计算机论文题目,优秀公共艺术论文选题 公共艺术论文题目如何定...
  7. iOS 九年,技术迭代迅捷下如何保持核心竞争力?
  8. java设计模式之工厂模式(UML类图分析+代码详解)
  9. 浅谈使用git进行版本控制
  10. 机器学习系列--数据预处理