[C语言基础 关键字] const static volatile的作用
嵌入式软件开发高频面试题文章目录一、关键字const二、关键字static1. 静态局部变量2. 静态全局变量或函数三、关键字volatile一、关键字const声明一个不可修改的变量即常量const将变量声明为“只读”初始化后不能再通过该变量名修改其值。intmain(){constinta0;//const变量必须在定义的时候初始化//a 20; //不可改变}小思考题const int *p 、 int * const p 、const int * const p的区别//常量指针 : 指针的指向可以修改但指针指向的值不能改inta10;intb10;constint*p1a;//常量指针p1b;//*p1 20;//报错指针指向的值不能改//指针常量 : 指针的指向不能改但指针指向的值可以修改int*constp2a;*p220;//p2 b;//报错//constint*constp1a;//指向常量的指针常量//p1 b;//报错//*p1 b;//报错//二、关键字static1. 静态局部变量使局部变量在函数调用之间保持其值#includeiostreamusing namespace std;intret(){staticintcnt0;//returncnt;}intmain(){coutret()endl;//输出1coutret()endl;//输出2coutret()endl;//输出3return0;}2. 静态全局变量或函数限制全局变量或函数的作用域为当前文件其他文件不可通过extern访问#includeiostreamusing namespace std;//extern int a; //非法操作intmain(){//cout a endl;//不可访问}//定义于另一个文件staticinta0;三、关键字volatile“防优化”告诉编译器 该变量的值可能在程序正常流程之外被意外修改要求编译器每次要从内存中读取而不是直接使用寄存器中的值intflag0;//中断标志位//假设此时有个中断voidinterrupt(){flag1;}intmain(){while(1){if(flag){flag0;}//编译器认为在while循环里flag未被修改于是将 flag 的值读入寄存器//之后每次判断都直接使用寄存器中的值始终为 0即使中断修改了内存中的 flag循环也检测不到变化test();}return0;}小思考题为什么这样使用 volatile int * const p int *const p 指针常量 指针指向地址不变地址里的内容是可以发生改变的volatile要求编译器每次都要从该地址内存中取出内容典型应用场景1、中断与主程序之间共享的标志位2、硬件寄存器的访问
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2433423.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!