欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > C/C++ 中volatile 关键字

C/C++ 中volatile 关键字

2024/11/29 15:22:39 来源:https://blog.csdn.net/2301_78814687/article/details/144116678  浏览:    关键词:C/C++ 中volatile 关键字

volatile关键字

C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量

Volatile意思是“易变的”,“易变”是因为外在因素引起的,像多线程,中断等。,他提示在该关键字之后的变量可能随时发生改变,因此编译后的程序每次需要存储或读取这个变量的时候,告诉编译器对该变量不做优化,都会直接从变量内存地址中读取数据,从而可以提供对特殊地址的稳定访问。

如 果没有 volatile 关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

一个参数既可以是const还可以是volatile吗?

可以的,例如只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

表示一个变量在程序编译期不能被修改且不能被优化;在程序运行期,变量值可修改,但每次用到该变量的值都要从内存中读取,以防止意外错误。

const volatile int a = 10;int main(){// a = 100; // 非法int* aPtr = &a;*aPtr = 100;cout<<a<<*aPtr<<endl;
}

一个指针可以是volatile 吗?

可以,当一个中服务子程序修改一个指向buffer的指针时。

volatile 指针

和 const 修饰词类似,const 有常量指针和指针常量的说法,volatile 也有相应的概念:

修饰由指针指向的对象、数据是 const 或 volatile 的:

const char* ptr;
volatile char* vpch;

volatile与const的区别

语义不同

const之后修饰的变量会被认为成是常量,常量是不能被修改的,保护数据的安全性

const int a=10;

volatile修饰的变量的可能随时发生变化的,直接从变量内存中读取地址

使用的场景不同

const只在编译期有用,在运行期无用

volatile在编译期和运行期都有用,在运行期:每次用到该变量的值,都从内存中取该变量的值。

const 关键字:

(1). 用于定义常量

const int a=10;

(2).作为函数参数,表示函数不会修改传入的参数

int fun(const int a){}

(3).定义常量成员函数,用于表明该函数不会修改类的成员变量。

volatile 关键字:

(1) 并行设备的硬件寄存器(如:状态寄存器)

(2) 一个中断服务子程序中会访问到的非自动变量

(2) 多线程应用中被几个任务共享的变量

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com