2015-10-20 关于const和volatile关键字

今天听的课的内容讲到了const和volatile关键字,笔记整理如下:

1、const关键字:

1.1、在C语言中,const修饰的变量是只读的,其本质还是变量。当我们在C代码中试图对一个用const修饰的变量进行写操作时,编译器的错误提示中有以下关键字:

...read-only variable...,这也证明了我上述陈述的内容。

1.2、const修饰的变量会占用内存空间。

1.3、本质上const只对编译器有用,用于告诉编译器该变量不能作为左值,在运行时无用,仍然可以通过强制类型转换的指针来修改其值。

1.4、const修饰函数参数时,表示函数体内不希望改变该参数的值,const修饰函数返回值时表示返回值不可改变,多用于返回指针的情形。

2、volatile关键字:

2.1、可以理解为“编译器警告指示字”,用于告诉编译器必须每次去内存中去用volatile修饰的变量的值,不要进行优化。

2.2、该关键字主要用于:修饰可能被多个线程访问的变量,也可以修饰可能被未知因素改变的变量。

3、思考题:

3.1、 const和volatile是否可以同时修饰一个变量?

3.2、 const volatile int i=0;这个时候i具有什么属性?编译器如何处理这个变量?

ANS:const和volatile是可以同时修饰一个变量的  const只是表示变量只读 不能出现在赋值号左边  防止程序“意外”修改   并且编译器一定会做优化 不会每次去内存取值 这个时候如果外部事件 如中断服务程序 改了这个变量的内存值  那么由于编译器优化就不会出有反应 这样会导致错误 加上volatile就告诉编译器 不要做任何优化  并且每次都去内存取值  而且这个变量不可以当左值使用 .

原文地址:https://www.cnblogs.com/wan0807/p/4895185.html