返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言关键字const与volatile怎么用
  • 681
分享到

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

2023-06-30 06:06:37 681人浏览 八月长安
摘要

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

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

一、const 只读变量

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

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

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

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

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

二、const 全局变量的分歧

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

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

下面看一段代码:

#include <stdio.h> 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;}

下面为输出结果:

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

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

三、const 的本质

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

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

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

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

#include <stdio.h> 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;}

下面为输出结果:

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

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

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

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

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

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

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

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

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

#include <stdio.h> 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;}

下面为输出结果:

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

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

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

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

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

五、volatile 解析

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

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

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

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

如下:

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

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

--结束END--

本文标题: C语言关键字const与volatile怎么用

本文链接: https://lsjlt.com/news/327591.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言关键字const与volatile怎么用
    今天小编给大家分享一下C语言关键字const与volatile怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、con...
    99+
    2023-06-30
  • C语言详细分析讲解关键字const与volatile的用法
    目录一、const 只读变量二、const 全局变量的分歧三、const 的本质四、const 修饰函数参数和返回值五、volatile 解析六、小结一、const 只读变量 con...
    99+
    2024-04-02
  • C语言中volatile关键字怎么用
    这篇文章主要介绍了C语言中volatile关键字怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.前言编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整...
    99+
    2023-06-20
  • C语言中的Const关键字怎么用
    这篇“C语言中的Const关键字怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的Const关键字怎么用”文章吧...
    99+
    2023-06-29
  • C语言volatile关键字的作用与示例
    目录写在前面volatile和内联汇编的volatile的选择写在前面 版本信息:Linux操作系统,x86架构,Linux操作系统下GCC9.3.1版本。GCC 9.3.0手册。 ...
    99+
    2023-05-15
    C语言volatile关键字 C语言volatile
  • C语言中volatile 关键字有什么用
    这期内容当中小编将会给大家带来有关C语言中volatile 关键字有什么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、关键字 volatile 是什么volatile是一个类型修饰符(type sp...
    99+
    2023-06-16
  • c语言中const关键字的作用
    const关键字在c语言中用于修饰变量或函数,使其值或行为在程序执行期间保持不变。它可以修饰变量(使其成为常量),防止意外修改数据,提高程序安全性。此外,const还可以修饰函数,确保其...
    99+
    2024-05-10
    c语言 敏感数据 代码可读性
  • C语言volatile关键字的作用是什么
    本篇内容介绍了“C语言volatile关键字的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在前面版本信息:Linux操作系统,...
    99+
    2023-07-06
  • 剖析C语言关键字之void,const,return
    目录returnvoid一.可做为函数的通用接口二.void不能修饰变量三.void修饰函数返回值const总结return 首先我们弄清楚c语言内存分配的方式 然后我们看一段代码...
    99+
    2024-04-02
  • C语言中volatile关键字的作用与使用案例教程
    一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高...
    99+
    2024-04-02
  • C语言中volatile关键字的深入讲解
    1. 什么是volatile关键字? volatile用于声明一个变量,告诉编译器该变量值容易发生改变,在编译、读取、存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储...
    99+
    2024-04-02
  • C语言中volatile关键字的详细介绍
    这篇文章主要讲解了“C语言中volatile关键字的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中volatile关键字的详细介绍”吧!1. 什么是volatile关键字?v...
    99+
    2023-06-20
  • C++11关键字const怎么使用
    本篇内容主要讲解“C++11关键字const怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11关键字const怎么使用”吧!一、历史按理来说,要想了解一件事物提出的原因,最好的办法...
    99+
    2023-06-25
  • 深入聊聊C语言中的Const关键字
    目录前言01const简述02常量的应用常量作为函数的参数C++中应用加const03#define和const总结前言 const是一个C语言的关键字,它限定一个变量不允许被改变。...
    99+
    2024-04-02
  • c语言register关键字怎么用
    在C语言中,register关键字用于将变量存储在寄存器中,以提高访问速度。但是需要注意的是,register关键字只是给编译器一个...
    99+
    2024-02-29
    c语言
  • C++中引用和const关键字怎么用
    今天小编给大家分享一下C++中引用和const关键字怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。引用下面的写法定义了...
    99+
    2023-06-29
  • C++ 右值引用与 const 关键字详解
    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,const关键字是一种修饰符。修饰符本身,并不产生任何实际代码。就 const 修饰符而言,它用来告...
    99+
    2024-04-02
  • 详解C++ 左值引用与 const 关键字
    左值引用是已定义的变量的别名,其主要用途是用作函数的形参,将 const 关键字用于左值引用时,其在初始化时可接受的赋值形式变得更加广泛了,这里来总结一下。 左值引用是已定义的变量的...
    99+
    2024-04-02
  • C语言 volatile与const同时使用应注意的问题
    const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;(2)另一个程序段则完全有可能修改...
    99+
    2022-11-15
    C语言 volatile const
  • c++中的volatile和variant关键字怎么用
    这篇文章主要讲解了“c++中的volatile和variant关键字怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++中的volatile和variant关键字怎么用”吧!一、两个长...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作