千家信息网

C语言关键字const与volatile怎么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天小编给大家分享一下C语言关键字const与volatile怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收
千家信息网最后更新 2026年11月03日C语言关键字const与volatile怎么用

今天小编给大家分享一下C语言关键字const与volatile怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、const 只读变量

  • const 修饰的变量是只读的,本质还是变量

  • const 修饰的局部变量在栈上分配空间

  • const 修饰的全局变量在全局数据区分配空间

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

const 修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。

二、const 全局变量的分歧

在现代C语言编译器中,修改 const 全局变量将导致程序崩溃。

注意:标准C语言编译器不会将 cons t修饰的全局变量存储于只读存储区中,而是存储于可修改的全局数据区,其值依然可以改变。

下面看一段代码:

#include  const int g_cc = 2; int main(){    const int cc = 1;        int* p = (int*)&cc;        printf("cc = %d\n", cc);        *p = 3;        printf("cc = %d\n", cc);        p = (int*)&g_cc;        printf("g_cc = %d\n", g_cc);        *p = 4;        printf("g_cc = %d\n", g_cc);        return 0;}

下面为输出结果:

上面代码说明 const 修饰的局部变量可以通过指针修改里面的值,但是 const 修饰的全局变量则不能通过指针来修改里面的值,会发生段错误。

三、const 的本质

  • C 语言中的 const 使得变量具有只读属性

  • 现代 C 编译器中的 const 将具有全局生命周期的变量存储于只读存储区(staic 修饰的变量也有全局生命周期,所以用 const 修饰后也存储于只读存储区)

  • const 不能定义真正意义上的常量

下面看一段 const 本质分析的代码:

#include  const int g_array[5] = {0}; void modify(int* p, int v){    *p = v;} int main(){    int const i = 0;    const static int j = 0;    int const array[5] = {0};        modify((int*)&i, 1);           // ok    //modify((int*)&j, 2);           // error    modify((int*)&array[0], 3);    // ok    //modify((int*)&g_array[0], 4);  // error        printf("i = %d\n", i);    printf("j = %d\n", j);    printf("array[0] = %d\n", array[0]);    printf("g_array[0] = %d\n", g_array[0]);        return 0;}

下面为输出结果:

如果把注释去掉,就会报段错误:

这就对应上面说的,如果修改 const 修饰的全局生命周期的变量,程序就会发生崩溃。

四、const 修饰函数参数和返回值

  • const 修饰函数参数表示在函数体内不希望改变参数的值

  • const 修饰函数返回值表示返回值不可改变,多用于返回指针的情形

小贴士:C 语言中的字符串字面量存储于只读存储区中,在程序中需要使用 const char* 指针。

下面看一段const 修饰函数参数与返回值的代码吧:

#include  const char* f(const int i){    //i = 5;        return "Autumn Ze";} int main(){    const char* pc = f(0);        printf("%s\n", pc);        //pc[6] = '_';        //printf("%s\n", pc);        return 0;}

下面为输出结果:

如果把下面的语句去掉注释

    //pc[6] = '_';        //printf("%s\n", pc);

运行程序就会报错,不能尝试去修改只读变量:

五、volatile 解析

  • volatile 可理解为"编译器警告指示字"

  • volatile 告诉编译器必须每次去内存中取变量值

  • volatile 主要修饰可能被多个线程访问的变量

  • volatile 也可以修饰可能被未知因数更改的变量

如下:

以上就是"C语言关键字const与volatile怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

变量 全局 存储 编译 语言 编译器 函数 代码 参数 指针 知识 程序 篇文章 周期 本质 生命 结果 输出 关键 关键字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 广州为想互联网科技有限公司 互联网科技工作委员会副主任毛军 广州互联网科技公司 嘟嘟瓜互联网科技 朗涯互联网科技 智慧科技互联网 顺玮阁互联网科技 中国最先进互联网科技公司 互联网公司科技股 移动互联网科技公司 畅思互联网科技 恒生互联网科技业指数调整周期 伊宁互联网科技做什么的 南京一网一红互联网科技有限公司 新氧科技和美国互联网有关系吗 广州梦谷互联网科技有限公司领导 福建互联网展示科技馆设计 广州三三互联网科技有限公司 银川新华互联网科技学校招聘 互联网科技股午盘股票涨跌 科技赋能互联网健康 链环科技传统企业怎么转型互联网 中国互联网十大科技股排名 亳州好赞互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 广州梦谷互联网科技有限公司领导 全球科技与互联网公司市值变化 互联网科技创新方面的资料 广州全民伙伴互联网科技有限公司
0