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就告诉编译器 不要做任何优化 并且每次都去内存取值 而且这个变量不可以当左值使用 .