当前位置:网站首页>const关键字及其作用(用法),C语言const详解
const关键字及其作用(用法),C语言const详解
2022-06-27 20:57:00 【luoganttcc】
说 const 定义的是变量,但又相当于常量;说它定义的是常量,但又有变量的属性,所以叫 常变量。用 const 定义常变量的方法很简单,就在通常定义变量时前面加 const 即可,如:
- const int a = 10;
const int a = 10;
- int const a = 10;
int const a = 10;
用 const 定义的变量的值是不允许改变的,即不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋初值。
如果定义的时候未初始化,我们知道,对于未初始化的局部变量,程序在执行的时候会自动把一个很小的负数存放进去。这样后面再给它赋初值的话就是“改变它的值”了,即发生语法错误。
用 const 修饰的变量,无论是全局变量还是局部变量,生存周期都是程序运行的整个过程。全局变量的生存周期为程序运行的整个过程这个是理所当然的。而使用 const 修饰过的局部变量就有了静态特性,它的生存周期也是程序运行的整个过程。我们知道全局变量是静态的,静态的生存周期就是程序运行的整个过程。但是用const修饰过的局部变量只是有了静态特性,并没有说它变成了静态变量。
我们知道,局部变量存储在栈中,静态变量存储在静态存储区中,而经过 const 修饰过的变量存储在内存中的“只读数据段”中。只读数据段中存放着常量和只读变量等不可修改的量。
前面说过,数组的长度不能是变量。虽然 const 定义的是只读变量,就相当于是定义一个常量。但是只读变量也是变量,所以 const 定义的变量仍然不能作为数组的长度。但是需要注意的是,在 C++ 中可以!C++ 扩展了 const 的含义,在 C++ 中用 const 定义的变量也可作为数组的长度。
const VS define
很多人在学习 const 的时候都会混淆它与 define 的区别。从功能上说它们确实很像,但它们又有明显的不同:- define是预编译指令,而const是普通变量的定义。define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。
- const定义的是变量,而define定义的是常量。define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。可以说,常变量是有名字的不变量,而常量是没有名字的。有名字就便于在程序中被引用,所以从使用的角度看,除了不能作为数组的长度,用const定义的常变量具有宏的优点,而且使用更方便。所以编程时在使用const和define都可以的情况下尽量使用常变量来取代宏。
- const定义的是变量,而宏定义的是常量,所以const定义的对象有数据类型,而宏定义的对象没有数据类型。所以编译器可以对前者进行类型安全检查,而对后者只是机械地进行字符替换,没有类型安全检查。这样就很容易出问题,即“边际问题”或者说是“括号问题”。
边栏推荐
猜你喜欢
![[Blue Bridge Cup training 100 questions] scratch digital calculation Blue Bridge Cup competition special prediction programming question collective training simulation exercise question No. 16](/img/7c/d4ea8747ce45fd2eb59a8f968653db.png)
[Blue Bridge Cup training 100 questions] scratch digital calculation Blue Bridge Cup competition special prediction programming question collective training simulation exercise question No. 16

未能加载文件或程序集“CefSharp.Core.Runtime.dll”或它的某一个依赖项。 不是有效的 Win32 应用程序。 (异常来自 HRESULT:0x800700C1)

Netease cloud lost its "feelings" card

Livox lidar+apx15 real-time high-precision radar map reproduction and sorting

MySQL十八:写语句的执行过程

UESTC (shenhengtao team) & JD AI (Mei Tao team) proposed a structured dual stream attention network for video Q & A, with performance SOTA! Better than the method based on dual video representation!

【IDEA】IDEA 格式化 代码技巧 idea 格式化 会加 <p> 标签

在线JSON转PlainText工具

电子科大(申恒涛团队)&京东AI(梅涛团队)提出用于视频问答的结构化双流注意网络,性能SOTA!优于基于双视频表示的方法!

华为伙伴暨开发者大会2022 | 麒麟软件携手华为共建计算产业,共创数智未来
随机推荐
「R」 Using ggpolar to draw survival association network diagram
【Vim】使用教程,常用命令,高效使用Vim编辑器
跟着存档教程动手学RNAseq分析(二)
mongodb基础操作之聚合操作、索引优化
SQL Server 2016详细安装教程(附注册码和资源)
Azure Kinect DK realizes 3D reconstruction (PC non real time version)
居家办公竟比去公司上班还累?
pytorch实现kaggle猫狗识别
Hiplot 在線繪圖工具的本地運行/開發庫開源
[js]var, let,const 的区别
Zabbix6.0 upgrade Guide - how to synchronize database upgrades?
CUDA error:out of memory caused by insufficient video memory of 6G graphics card
在线JSON转PlainText工具
Batch processing - Excel import template 1.1- support multiple sheet pages
使用同花顺手机炒股安全吗?
First principles (optimal solution theory)
Summary of various loams (laser SLAM)
go日志包 log的使用
ABAP essay - material master data interface enhancement - tab enhancement
OData - API using SAP API hub in SAP S4 op