news 2026/9/30 13:21:58

[C语言基础 关键字] const static volatile的作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[C语言基础 关键字] const static volatile的作用

嵌入式软件开发高频面试题

文章目录

  • 一、关键字const
  • 二、关键字static
    • 1. 静态局部变量
    • 2. 静态全局变量或函数
  • 三、关键字volatile

一、关键字const

声明一个不可修改的变量,即常量

const将变量声明为“只读”,初始化后不能再通过该变量名修改其值。

intmain(){constinta=0;//const变量必须在定义的时候初始化//a = 20; //不可改变}

小思考题:
const int *p 、 int * const p 、const int * const p的区别

//常量指针 : 指针的指向可以修改,但指针指向的值不能改inta=10;intb=10;constint*p1=&a;//常量指针p1=&b;//*p1 = 20;//报错,指针指向的值不能改//指针常量 : 指针的指向不能改,但指针指向的值可以修改int*constp2=&a;*p2=20;//p2 = &b;//报错//constint*constp1=&a;//指向常量的指针常量//p1 = &b;//报错//*p1 = b;//报错//

二、关键字static

1. 静态局部变量

使局部变量在函数调用之间保持其值

#include<iostream>using namespace std;intret(){staticintcnt=0;//return++cnt;}intmain(){cout<<ret()<<endl;//输出1cout<<ret()<<endl;//输出2cout<<ret()<<endl;//输出3return0;}

2. 静态全局变量或函数

限制全局变量或函数的作用域为当前文件,其他文件不可通过extern访问

#include<iostream>using namespace std;//extern int a; //非法操作intmain(){//cout << a << endl;//不可访问}
//定义于另一个文件staticinta=0;

三、关键字volatile

“防优化”
告诉编译器 该变量的值可能在程序正常流程之外被意外修改,要求编译器每次要从内存中读取,而不是直接使用寄存器中的值

intflag=0;//中断标志位//假设此时有个中断voidinterrupt(){flag=1;}intmain(){while(1){if(flag){flag=0;}//编译器认为在while循环里flag未被修改,于是将 flag 的值读入寄存器//之后每次判断都直接使用寄存器中的值(始终为 0),即使中断修改了内存中的 flag,循环也检测不到变化test();}return0;}

小思考题:
为什么这样使用 volatile int * const p ?
int *const p 指针常量 指针指向地址不变,地址里的内容是可以发生改变的,volatile要求编译器每次都要从该地址内存中取出内容

典型应用场景:
1、中断与主程序之间共享的标志位
2、硬件寄存器的访问

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 13:21:18

ES6:初学1

文章目录一、ES6是什么&#xff1f;二、为什么要学习ES6三、ES6的特性关键字letconst变量解构赋值数组结构对象结构模板字符串箭头函数&#xff08;重点&#xff09;一、ES6是什么&#xff1f; ES6 全称是 ECMAScript 6&#xff08;也叫 ECMAScript 2015&#xff09;&#xff…

作者头像 李华
网站建设 2026/9/30 13:19:55

西兰花检测数据集VOC+YOLO格式1084张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;1084标注数量(xml文件个数)&#xff1a;1084标注数量(txt文件个数)&#xff1a;1084标注类别…

作者头像 李华
网站建设 2026/8/23 9:49:25

想通过gometa实现通用excel导出工具

我来设计一个基于 Gometa 的通用 Excel 导出工具。这个工具将利用 Gometa 的标签解析能力和 godi 的依赖注入特性&#xff0c;实现声明式、可扩展的 Excel 导出功能。架构设计 ┌─────────────────────────────────────────┐ │ …

作者头像 李华
网站建设 2026/8/23 9:49:25

ClickHouse性能优化实战:如何用跨表本地化替代GLOBAL JOIN提升查询速度

ClickHouse性能优化实战&#xff1a;跨表本地化替代GLOBAL JOIN的工程实践 在分布式数据库领域&#xff0c;ClickHouse以其卓越的OLAP性能著称&#xff0c;但当面对跨分片JOIN操作时&#xff0c;即使是这个性能怪兽也会显露出疲态。我曾在一个日增数十TB的广告分析平台上&#…

作者头像 李华
网站建设 2026/8/23 9:49:28

Python实战:用NumPy手撕SVD分解(附完整代码与可视化)

Python实战&#xff1a;用NumPy手撕SVD分解&#xff08;附完整代码与可视化&#xff09; 在数据科学和机器学习领域&#xff0c;矩阵分解技术扮演着至关重要的角色。其中奇异值分解&#xff08;SVD&#xff09;因其强大的数学性质和广泛的应用场景&#xff0c;成为每个开发者必…

作者头像 李华
网站建设 2026/8/23 9:49:29

Guohua Diffusion 开发环境搭建:从零配置IDE到运行第一个Demo

Guohua Diffusion 开发环境搭建&#xff1a;从零配置IDE到运行第一个Demo 想自己动手玩玩Guohua Diffusion&#xff0c;改改模型&#xff0c;跑跑实验&#xff0c;结果第一步就被开发环境给卡住了&#xff1f;别急&#xff0c;这事儿我太熟了。从IDE装哪个版本&#xff0c;到P…

作者头像 李华