一个例子说明const

const and volatile

const与指针一起使用的情况分析及总结:

const int nValue; //nValue是const

int const nValue; // nValue是const

  const char *pContent; //*pContent是const, pContent可变

  const (char *) pContent;//pContent是const,*pContent可变

  char* const pContent; //pContent是const,*pContent可变

  char const * pContent;// *pContent是const, pContent可变

  (char *) const pContent;//pContent是const,*pContent可变

  char* const pContent;// pContent是const,*pContent可变

  char const* const pContent;// pContent和*pContent都是const

const char* const pContent; //pContent和*pContent都是const

我们可以这样总结:const没有固定的格式用法,它只是个修饰符。在和指针连用时,其实就是声明某个变量为const。若变量pContent和*紧挨在一起,则就被声明为const的为pContent(最后两个例子和这个原则上是一致的)。const char *pContent;还有char const * pContent中,const都是在修饰* pContent。其实,如果我们安静看看代码,这些表达方式是符合人们习惯的。

const int a=1;
int *p;
p=&a;
p=&((int)a);

p=(int *)(&a);

第一个赋值是错误的,这符合我们的预期,编译器给的原因是“error C2440: “=”: 无法从“const int *”转换为“int *””

第二个赋值也是错误的,这个错误出在类型指派上。所谓的指派,会在与a的存储区域不同的地方产生一个新值,这当然是个常量,并且对它去地址是没有意义的。编译器给的原因是“error C2101: 常量上的“&””、“ 无法从“int”转换为“int *””

第三个是可以的。

由此可知,const这个修饰符,修饰的是a,也就是说不能通过a来修改数据,但其实这个变量是可以修改的,就如上边第三个赋值语句所示的方法。

在我的项目中,有这样的用法:

void * const modbus_map4[]={
&Remote_instruction,
&RTC_ym,
&RTC_dh,
&RTC_ms,
&Link_timeout,
};

在之后的程序中,会有如下这样的语句,是没有问题的:

void * const *map;

map=modbus_map4;

volatile有相似的用法。

转载于:https://www.cnblogs.com/lxjsailor/archive/2012/04/09/2793487.html

const与volatile相关推荐

  1. C语言中的const,volatile与restrict的使用

    1. const 变量声明中带有关键词const,意味着不能通过赋值,增量或减量来修改该变量的值,这是显而易见的一点.指针使用const则要稍微复杂点,因为不得不把让指针本身成为const和指针指向的 ...

  2. c语言static. volatile,嵌入式系统C语言重点语法const、volatile、static、堆栈等的意义及用法...

    原标题:嵌入式系统C语言重点语法const.volatile.static.堆栈等的意义及用法 在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场. 要点:堆, ...

  3. boost::type_index模块type_index`(和 `type_info`)能够存储确切的类型,无需剥离 const、volatile 和引用

    boost::type_index模块type_index`(和 `type_info`)能够存储确切的类型,无需剥离 const.volatile 和引用 实现功能 C++实现代码 实现功能 boo ...

  4. C语言 const、volatile、const volatile限定符理解

      在C语言经常会用到变量类型限定符const和volatile,但是const和 volatile也可以一起使用.下面就一次分析一下这三种情况的使用方法. 1.const   从字面意思理解,意思就 ...

  5. static、const、volatile等关键字作用

    目录 一.需要明白c语言中对象的一些属性 1.C语言中内存分配 2.变量的作用域 3.链接属性 4.存储期 二.static.const.volatile关键字作用 1.static关键字作用 2.c ...

  6. C语言个人思考# volatile有什么作用?一个参数可以同时用const和volatile进行修饰吗?

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.volatile的作用? 二.volatile,const可否同时修饰一个参数? 总结 前言 提示:这里可以添加本 ...

  7. c语言restrict和const,C语言中const、volatile、restrict等类型限定符的区别

    auto.register.static.extern是属于存储类修饰符.在声明时,存储类修饰符最多只能使用一个,而且无法用在typeof声明中. 而类型限定符是指const.volatile.res ...

  8. C语言中auto,register,static,const,volatile的区别

    1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是aut ...

  9. 关键字static、const、volatile的作用

    关键字static的作用是什么?这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1.在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2. 在模 ...

最新文章

  1. 磁盘IO:缓存IO、直接IO、内存映射
  2. 引子:C++中如何有效管理分配在堆中的对象
  3. 如何在Postfix中设置邮件转发
  4. Spring boot定制错误数据携带出去
  5. 4-曲线拐点模型分析
  6. 谨慎Asp.net中static变量的用法
  7. 通过动态获取cookie爬取国家企业信用信息公司系统
  8. silverlight寻奇 - Graphite
  9. ubuntu18.04安装unity tweak tool
  10. 解决使用elementUI框架el-upload上传组件时session丢失问题
  11. 《数据结构与算法分析:C语言描述》复习——第六章“排序”——插入排序
  12. rocketmq消费
  13. ubuntu多显示器单触摸屏校准
  14. 2021强网拟态防御国际精英赛 reverse: babytms
  15. 婚纱摄影、影楼、照相馆流量制造工具预约系统之种草社区
  16. 【数学模型】基于Matlab模拟超市排队系统
  17. RX 6600XT vs RTX 2060Super 显卡对比
  18. 中序和后序(前序和中序)序列确定一颗二叉树
  19. 子网掩码、IP和默认网关
  20. mysql如何不停机迁移_如何实现真正的不停机数据迁移?

热门文章

  1. Java使用JNDI调用配置在服务器(Weblogic、Tomcat)的数据源配置
  2. 第2章[2.8] Ext JS的控制器类型及使用
  3. FTP 编写 4:命令解析
  4. Android5.1自定义闹钟铃声,Android 设置来电铃声、通知铃声、闹钟铃声中的坑
  5. idea怎么跳转到源代码_mooc-IDEA 项目/文件之间跳转--002
  6. mysql ---- 约束
  7. 计算机系统的优化具体操作,从八个方面来探讨计算机操作系统的优化
  8. mysql数据库字段字符转数字批量语句_MySQL数据库批量替换指定字段字符串SQL语句命令...
  9. 苹果7支持快充吗_iPhone12的磁吸无线充到底怎么回事?是否支持苹果20W快充?
  10. 4比较三个数的大小输出最大的值并从小到大排序输出