C 语言中Const限定符的作用!

C语言 const、volatile、const volatile限定符理解   在C语言经常会用到变量类型限定符const和volatile,但是const和 volatile也可以一起使用。下面就一次分析一下这三种情况的使用方法。 1、const   从字面意思理解,意思就是常量,常数,也就是不能通过赋值、递增、递减来修改它的值。 对于普通变量来说,它的使用很简单。比如定义了一个变量 const int i = 10; 那么在代码中只能使用 i 的值,而不能修改 i 的值。 对于指针来说,它的使用就会稍微复杂一点。 const int *p; 这个意思就是指针 p 指向的 阅读详情

           任何变量的声明都可以使用const限定符限定。用该限定符指定的变量的值,不能被修改。如果你在source code中显示的修改这种变量,则在编译阶段会报错!但也并不是说用const修饰的变量完全无法修改,是否能够修改还要依情况而定!下面通过两个例子来说明这个问题!

           void main(void)

             {

                    char buf[4];

                    const int a =0;

                    a = 2;

              }

          对上述代码进行编译,你会发现在编译阶段会报错,导致不能生成可执行文件!这说明如果你在源码中直接显示的修改const变量,编译器会检测到你在试图修改一个const变量而报出一种语法错误。但是否说明const变量就无法修改呢?我们来看一下下面这个例子的运行结果!

            void main(void)

            {

                char buf[4];

                const int a = 0;

                buf[4] = 97;

                printf("The char of the a is %d\n", a);

            }

            编译、运行后,发现a的值被修改成了97。在代码中并未进行显示的修改a变量,而是隐式的修改了a的值,我们知道在函数体内的声明中,对于buf数组只是申请了4个元素,而buf[4] = 97;语句造成了数组的访问越界,恰好buf[]与a都是存储在栈区,所以buf[4]正好访问到了a变量!

           那是否我们隐式的修改const 变量,在所有的情况下都是可以的呢?我们通过下面的例子来看一下这个问题。

           const char words = ‘a’;

           char test_words = 'b';

           char *pstring = "Hello World";

           char string[] = {'H', 'e', 'l', 'l', 'o'};

            void main(void)

            {

                     char *pwords = &words;

                      *pwords = 'b';

                     printf("The char of the words variable is %c\n", words);

             }

           编译、运行,你会发现它在编译阶段是能够通过的,这说明,编译器并不会认为对于const变量的地址的获取为非法的,但是程序在运行过程中会报出segmentation fault的错误!这说明在运行阶段发现其不可修改性!但为什么在此例中const变量的值不能修改了呢!我们通过读取各个变量地址的方法来获取相应信息!

           void main()

          {

                           printf("The address of the words variable is %x", &words);

                           printf("The address of the test_words variable is %x", &test_words);

                           printf("The address of the pstring variable is %x", pstring);

                           printf("The address of the string variable is %x", string);

         }

          运行结果如下

                          The address of the words variable is 400840

                          The address of the test_words variable is 6010be

                          The address of the pstring variable is 400841

                          The address of the string variable is 601040

       我们可以看到,words变量和pstring变量所指的地址是临近的,说明这words和“Hello World”存储在同一个段中,而我们知道字符串是储存在文字常量区的,是只读属性的,所以words也应该为只读,所以在程序中如果试图修改它,则会报错!而在第二个程序中,const变量是存在栈区的,所以是可以修改的!

STM32之W5500网络通信_w5500 profinet *初始化8个socket*/setSHAR(ConfigMsg.mac);/*配置Mac地址*/setSUBR(ConfigMsg.sub);/*配置子网掩码*/setSIPR(ConfigMsg.lip);/*配置Ip地址*/setGAR(ConfigMsg.gw);/*配置默认网关*/setRTR(2000);/*设置溢出时间值*/setRCR(3);/*设置最大重新发送次数*/ 阅读详情

相关推荐

树莓派Bookworm系统避坑指南:3种方法解决pip install报错externally-managed-environment

本文详细解析树莓派Bookworm系统中pip install报错externally-managed-environment的成因,并提供三种实用解决方案:使用虚拟环境(venv)隔离项目依赖、通过pipx管理全局Python工具,以及理解风险后的系统安装方法。帮助开发者安全高效地管理Python环境,避免系统冲突。

android的专栏 763

const限定符的作用

const限定符的作用;const与#define的不同

海阔天空的专栏 2057

用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间

本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。

w7x8y9z的博客 187

const限定符

c++中,const(常量限定符)的核心作用时,前置编译器保证“只读性”。可以修饰变量、指针、引用、成员函数、函数参数/返回值等。

weixin_51287424的博客 648

AI对嵌入式的冲击分三波,大多数人只看到了第一波

摘要:AI对嵌入式行业的冲击将分三波递进:第一波(已发生)是代码生成,AI能完成底层驱动配置;第二波(1-2年内)是架构设计,AI将参与系统方案制定;第三波(2-3年)是需求验证,AI能穷举测试用例但无法替代安全决策。每波冲击都将重新定义工程师的价值标准,经验型工程师若不能将隐性知识转化为显性规则将面临淘汰。作者指出,完全不用AI的人第一波就会被淘汰,而仅满足于第一波应用的人将在后续冲击中落后。

u010898524的博客 960

uniapp:K线图,支持H5,APP

K线,1分钟搞定。备注详细,无需理解,直接复制即可。

sunluyi的博客 4573

const限定符以及顶层const和底层const的理解

一、const限定符的作用   当我们在写程序的时候,想定义一种变量,它的值不会被改变,这时就可以用const限定符来定义变量,也可称它为常量,常量的定义必须要有初始值,否则编译错误。其实际例子是用一个变量来表示缓冲区的大小的时候。   对内置类型用const是比较通俗易懂的,其作用就是不能对用const定义了的变量进行修改(写),但可以进行拷贝(读)。 const int bufSi...

Chancer224的博客 499

NotebookLM平替实测:用Open Notebook+Ollama零成本搭建私有AI知识库

本文提供了一份详细的实战指南,教你如何利用Open Notebook与Ollama,在本地零成本搭建一个功能强大且完全私有的AI知识库。通过Docker容器化部署,实现数据绝对安全、模型自由选择与离线运行,是NotebookLM等云端工具的绝佳平替方案,尤其适合注重数据隐私的教育工作者、研究者及小团队。

weixin_29052717的博客 513

限定符const

任何变量的声明都可以使用const限定符限定,该限定符指定变量的值不能够被修改,对数组而言,const限定符指定数组元素的值都不能够被修改 const限定符也可以配合数组参数使用,它表示函数不能修改数组元素的值 const double e=3.14159; const char str[]="hello" 指向const的指针不能用于修改任何值 错误: 正确:

qq_38635597的博客 234

解决Office 365 SMTP问题:C#邮件发送详解

本文介绍了如何在C#中使用Office 365 SMTP服务发送邮件。重点讲解了正确配置SMTP客户端的关键参数:必须使用587端口并启用TLS加密(EnableSsl=true),同时通过NetworkCredential进行身份验证。虽然SmtpClient已不推荐用于新项目,但本文提供的代码示例仍适用于临时项目或系统维护,并建议未来可考虑使用MailKit等现代邮件库。文章还包含了错误处理机制,确保程序健壮性。

2501_90323865的博客 140

第3.1.3章 机器人第三方库实战总结:ROS 2 入门实战及和ROS1的对比,打通机器人开发的任督二脉

本文针对机器人SLAM开发中第三方库的学习痛点,重点介绍ROS 2在SLAM中的应用。文章首先对比ROS 1与ROS 2的核心差异,梳理ROS 2知识图谱,包括节点、话题、服务等核心概念。通过实战项目演示如何构建激光SLAM节点,结合代码详解运行流程。最后给出学习建议,强调动手实践的重要性,帮助开发者快速掌握ROS 2在SLAM开发中的关键应用。

行知SLAM 178

C语言中的类型限定符.const限定符

目录 数组 关键字:static 运算符:&、*(一元) 如何创建并初始化数组 指针(在已学过的基础上)、指针和数组的关系 编写处理数组的函数 二维数组 人们通常借助计算机完成统计每月的支出、日降雨量、季度销售额等任 务。企业借助计算机管理薪资、库存和客户交易记录等。作为程序员,不可 避免地要处理大量相关数据。通常,数组能高效便捷地处理这种数据。第 6 章简单地介绍了数组,本章将进一步地学习如何使用数组,着重分析如何编 写处理数组的函数。这种函数把模块化编程的优势应用到数组...

Actir的博客 1812

计算机视觉教程1-1:透视空间与透视变换

在生活中,透视现象很常见,其物理本质是光的直线传播。由于人眼与相机在捕获图像时均存在透视现象,因此计算机几何基于透视空间进行研究。本节介绍透视变换原理

FRIGIDWINTER的博客 3089

ANSI C类型限定符(const、volatile)

C90 恒常性const 易变性 volatileC99 restrict 用于提高编译器优化C11 _Atomic C11提供一个可选库,由stdatomic.h管理,以支持并发程序设计,而且_Atomic是可选支持项。

2303_80078385的博客 2490

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

限定符const用法详解

离变量最近的说明了变量的性质----pi左边是const,说明pi是一个const对象,* 说明pi是一个常量指针,而const int 说明常量指针pi指向的对象是const int 类型的变量,即整型变量。(但是,两者必须为同一类型的变量,否则,编译器将在类型转换的过程中创建临时变量,就无法通过修改p2来控制b,而是控制临时变量)(但是,两者必须为同一类型的变量,否则,编译器将在类型转换的过程中创建临时变量,就无法通过修改p2来控制b,而是控制临时变量):表示被限定的对象一旦确定,就不能被修改。

2301_79357377的博客 1724

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深入体验c语言中const的多种多样的用法

const是一个C语言(ANSI C)的关键字,它限定一个变量不允许被改变,一定程序上提高程序的安全性和可靠性。虽然这个关键字看起来简单,但是实际上随着它限定位置不一样,产生的效果也各异。

tpc4289的专栏 3612

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C语言之类型限定符(const/volatile/restrict/_Atomic)的作用

C语言的强大不必多说,很多新手或刚入坑的朋友可能决定自己C语言水平还行,为什么这么说呢?因为当年作者就是这么认为的,结果在涉及一些关键编码、平台、编译器以及环境的不同情况下,看见前辈们的编码,就感觉匪夷所思,完全不明所以。当然啦,后来作者经过项目的敲打后,也是弄明白C语言关于类型限定符的原由了。

Wx的博客 1197

C语言的const类型限定符

C语言的const类型限定符 类型限定符的变化 我们通常用类型和存储类别来描述一个变量。C90还增加了两个属性:恒常性(constancy)和易变性(volatility)。这两个属性分别用关键字const和volatile来声明,以这两关键字创建的类型是限定类型。C99标准新增了第3个限定符:restrict,用于提高编译器优化。C11新增了第四个限定符:_Atomic。C11提供了一个可选库,由stdatomic.h管理,以支持并发程序设计,而且 _Atomic是可选支持项。C99为类型限定符增加了一

Galaxy_Robot的博客 516

【精通C语言】ANSI C 类型限定符const,volatile,restrict,_Atomic

本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 文章目录ANSI C 类型限定符1️⃣const 类型限定符  在指针和形参声明中使用const2️⃣volatile 类型限定符3️⃣restrict 类型限定符4️⃣_Atomic 类型限定符➰旧关键词新用法 ANSI C 类型限定符        我们通常使用类型和存储.

从善若水的博客 1059

C语言中的const限定符

“任何变量的声明都能用const限定符修饰,该限定符指定变量的值不能被修改。对数组而言,const限定符指定数组所有元素的值都不能被修改: const double e = 2.71828182845905; const char msg[] = "warining: "; const限定符也可配合数组参数使用,它表明函数不能修改数组元素的值。 int strlen(const char[]);” 上述是书中第一章关于const的描述。 1. 第一个疑惑就是const修饰的变量既然不能修改,也就

yangjingdong2008的博客 691

从C语言标准揭秘C指针:附:const限定符的使用规则

1. 修饰规则速查表声明示例修饰目标可修改对象初始化要求基础类型变量 a无必须初始化指向的数据指针 p建议初始化,非必须指针 p 本身数据 * p必须初始化指针本身和指向的数据无必须初始化(注:IntPtr 为 int*)指针 p 本身(常量指针)数据 * p必须初始化2. const 的核心价值编译期检查:提前拦截意外修改,减少运行时错误。语义表达:明确代码意图(“此数据不可通过此路径修改”),提升可读性和可维护性。接口安全。

xingke的专栏 1188

C语言中的类型限定符有哪些?

C语言中有一些关键字起到了限定的作用,他们被称为限定符,那么在C语言中共有几个限定符呢?他们的作用分别是什么呢?本文主要介绍C中4个限定符 ANSI C类型限定符 我们通常使用数据类型和存储类别来描述一个变量。C90还新增了俩个属性:恒常性和易变性。这俩个属性可以分别用关键字const和volatile来声明,以这俩个关键字创建的类型是限定类型。C99新增了第三个限定符:restrict,用于提高编译器优化。C11标准新增了第四个限定符:_Atomic.C11提供一个可选库,由stdatomic.h管理

白的夜的博客 1629

C语言类型限定符const volatile restrict _Atomic

C语言类型限定符 const volatile restrict _Atomic

算法笨蛋 978

【C语言】ANSI C 类型限定符

(或。

junyexxx3284的博客 2122

C语言限定符

C语言限定符 关键字 使用关键字限定变量:const、volatile、restric 一般注释限定符用于限制变量的使用方式。 1. 不能改变初始化以后的 const 变量。编译器不会假设 2. volatile变量不被某些外部代理(如,一个硬件更新)改变。 3. restrict 限定的指针是访问它所指向内存的唯一方式(在特定作用域中)。 属性 1. const int joy = 101;声明创建了变量joy,它的值被初始化为101。 2. volatile unsigned i..

We are all in the gutter, but some of us are looking at the stars. 1189
上一篇: _IO, _IOR, _IOW, _IOWR 宏的用法与解析
下一篇: C++中this指针的用法
计算机与认知
博客等级 码龄14年 31粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值