C语言volatile与const同时使用应注意的问题
const最主要的特点就是只读,有常量、常量指针,如果不是特别小心的分析C语言语句的书写格式,再加上指针的使用,就特别容易弄错。volatile关键字是一个类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,下面就有小编分享C语言volatile与const同时使用应注意的问题,欢迎大家学习!
const和volatile放在一起的意义在于:
(1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;
(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。
“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。
“volatile”的含义是“请不要做没谱的'优化,这个值可能变掉的”,而并非“你可以修改这个值”。
因此,它们本来就不是矛盾的。
const修饰的变量不允许这里修改不代表不允许别处修改,比如:
复制代码 代码如下:
int i = 5;
const int* p = &i;
*p = 6; // 不可以;
i = 7; // 完全可以,而且那个“const”的“*p”也跟着变成了7。
对于非指针非引用的变量,const volatile同时修饰的意义确实不大。个人觉得。
需要明白“volatile”的含义并非是“non-const”。所以他们才可以放在一起。
在C++语言中,const没有反义词,如果一个变量没有const修饰,那它本身就是const的反义词,而并非加上volatile才是const的反义词。
两者同时修饰一个对象的典型情况,是用于驱动中访问外部设备的只读寄存器。
留一个问题:const volatile int i=10;这行代码有没有问题?如果没有,那 i 到底是什么 属性?
回答一:没有问题,例如只读的状态寄存器。它是volatile,因为它可能被意想不到地改变;它是const,因为程序不应该试图去修改它。volatile和const并不矛盾,只是控制的范围不一样,一个在程序本身之外,另一个是程序本身。
回答二:没问题,const和volatile这两个类型限定符不矛盾。const表示(运行时)常量语义:被const修饰的对象在所在的作用域无法进行修改操作,编译器对于试图直接修改const对象的表达式会产生编译错误。volatile表示“易变的”,即在运行期对象可能在当前程序上下文的控制流以外被修改(例如多线程中被其它线程修改;对象所在的存储器可能被多个硬件设备随机修改等情况):被volatile修饰的对象,编译器不会对这个对象的操作进行优化。一个对象可以同时被const和volatile修饰,表明这个对象体现常量语义,但同时可能被当前对象所在程序上下文意外的情况修改。另外,LS错误,const可以修饰左值,修饰的对象本身也可以作为左值(例如数组)。
-
C语言编程中的联合体union入门学习教程详解
联合体(union)在C语言中是一个特殊的数据类型,能够存储不同类型的数据在同一个内存位置。可以定义一个联合体使用许多成员,但只有一个部件可以包含在任何时候给定的值。联合体会提供使用相同的存储器位置供多用途的有效方式。定义联合体要定义联合体,必须使用unio...
-
c语言如何控制硬件
你们知道在C语言中如何控制计算机的硬件吗?下面是应届毕业生小编带来的关于c语言如何控制硬件的内容,欢迎阅读!c语言如何控制硬件?C语言是没办法控制硬件的首先,C语言不能够直接对硬件进行操作。从本质上来说,连汇编语言都不可以。只有机器语言能够直接操作硬件。...
-
C语言数据结构中栈操作实验大纲
c语言中栈是一种数据结构,后进先出,即最后进入栈的数据最先弹出。以下是本站小编搜索整理的关于C语言数据结构中栈操作实验,需要的`朋友可以参考一下!想了解更多相关信息请持续关注我们应届毕业生考试网!实验:编写一个程序实现顺序栈的各种基本运算,并在此基础上设...
-
如何在c语言中调用Linux脚本
如何在c语言中调用Linux脚本呢?你知道如何在c语言中调用Linux脚本吗?下面是小编为大家带来的如何在c语言中调用Linux脚本的知识,欢迎阅读。一、引言对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系...
相关文章
- 「雅思写作」the Growth Cycle of A Volcanic Island
- Connect to Idle Instance问题的解决方法
- 六年级英语Unit 1 Welcome back to school教学设计
- 英语美文阅读:Kerry: Anti-IS Coalition Could Contribute to B
- Unit 5 It must belong to Caral section A英语评课稿
- The Limitation of The Violence Shot 暴力镜头的限制英语作文
- 高一英语写作范文:Is It the Only Way Out To Go To College
- 英语阅读:Life is inevitable consequence of physics
- 人教PEP版小学五年级英语下册Unit3Myschoolcalender.ALet’stalk
- Module 3 Unit 2 I love my pocket calculator说课稿