首页 > 其他分享 >不同情况下,const修饰的变量存储的位置

不同情况下,const修饰的变量存储的位置

时间:2024-05-17 17:02:13浏览次数:15  
标签:存储 CONST 常量 修饰 const 变量

1 前言
在C语言中,const 修饰的变量存储在适当的内存区域中,具体取决于变量的声明方式和作用域。

2 全局 const 变量
如果 const 变量是在全局作用域中声明的,它将存储在静态存储区(Static Storage Area)中。
静态存储区是在程序启动时分配的,该区域中的数据在整个程序执行期间都存在。
const int GLOBAL_CONST = 10; // 全局常量

int main() {
// 全局 `const` 变量存储在静态存储区
// 在整个程序执行期间都存在
// 可以在任何地方访问
return 0;
}
3 局部 const 变量
如果 const 变量是在函数内部或代码块内部声明的,它将存储在栈(Stack)上。
栈是一种后进先出(LIFO)的数据结构,用于存储局部变量、函数参数和函数调用的上下文信息。
在函数调用时,栈会分配空间来存储局部变量,当函数返回时,栈上的数据会被自动释放。
int main() {
// 局部 `const` 变量存储在栈上
// 在函数调用时分配,在函数返回时释放
// 只在函数内部可见
const int LOCAL_CONST = 20;
return 0;
}
4 const 修饰的字符串常量
如果 const 用于修饰字符串常量,那么该字符串常量将存储在常量存储区(Constant Storage Area)。
常量存储区是用于存储常量字符串和全局常量的特殊内存区域,其中的数据在程序运行期间保持不变。
const char* const STR_CONST = "Hello"; // 字符串常量

int main() {
// `const` 修饰的字符串常量存储在常量存储区
// 在程序运行期间保持不变
// 可以在任何地方访问
return 0;
}
5 总结
全局 const 变量 GLOBAL_CONST 存储在静态存储区,可以在程序的任何地方访问。

局部 const 变量 LOCAL_CONST 存储在栈上,在函数调用时分配,在函数返回时释放。

const 修饰的字符串常量 STR_CONST 存储在常量存储区,在程序运行期间保持不变。

总之,const 修饰的变量可以存储在静态存储区、栈或常量存储区,具体取决于变量的声明位置和用途。

标签:存储,CONST,常量,修饰,const,变量
From: https://www.cnblogs.com/FireLife-Cheng/p/18198075

相关文章

  • 使用达梦客户端工具对存储过程调试
    找到存储过程,右键》调试》在新的调试编辑器调试打开界面如下:下面有个初始变量,输入所需要的参数也可以直接在存储过程写入参数P_DEMO(1001)这种参数输入好之后,点右上角绿色三角箭头开始调试选择下面的进入按钮对存储过程内部进行调试进入之后,界面如下,这样就可以选择下面标......
  • 铁威马硬盘柜D4-320:超越网盘,让数据存储更自由
    时至今日,我们越来越依赖数字数据来记录生活的点滴和工作的成果。然而,随着数据的不断累积,我们时常会遇到一个问题:网盘空间不够用。此外,网盘的安全性也是我们关注的焦点,一旦网盘服务商出现问题或数据泄露,我们的宝贵数据就可能面临丢失的风险。因此,寻找一个可靠的本地存储解决方案成......
  • Flink同步kafka到iceberg(cos存储)
    一、flink到logger1、sourcecreatetablesource_table(idbigintcomment'唯一编号',order_numberbigintcomment'订单编号',update_timestamptimestamp_ltzmetadatafr......
  • mysql存储过程中如何使用游标中的值进行查询
    在MySQL中,游标(Cursor)是一种用于从结果集中逐行访问数据的数据库对象。在存储过程(StoredProcedure)中,你可以使用游标遍历查询结果,并对每一行数据进行处理。下面是一个简单的示例,说明如何在MySQL存储过程中使用游标中的值进行查询:创建示例表首先,我们创建一个简单的示例表,用于演......
  • 数据库中存储bool对象的数据,使用Bit和Integer有什么区别,性能上有多大的差异
    在数据库中存储布尔(Boolean)值时,常见的两种选择是使用BIT类型或INTEGER类型。两者在存储、性能和使用上的区别如下:1.BIT类型存储:BIT类型专门用于存储布尔值。通常,一个BIT字段只需一个比特位来存储0或1,这在存储空间上更为紧凑。性能:在大多数情况下,BIT类型的性能表......
  • 爬虫-JSON文件存储
    JSON文件存储JSON是一种轻量级的数据交换格式,它是基于ECMAScript的一个子集;JSON在Python中分别由list和dict组成;1、JSON模块的功能函数描述json.dumps()将python类型转换为字符串,返回一个str对象。实现把一个python对象编码转换成JSON字符串json.loads()把JSO......
  • 爬虫-CSV文件存储
    CSV文件存储CSV是CommaSeparatedValues,称为逗号分隔值,一种以.csv结尾的文件,所有值都是字符串。文件操作示例importcsvwithopen('student.csv','a+',newline='')asfile:#newline=''表示不空行#创建一个writer对象writer=csv.writer(file)#一次写......
  • Garnet:微软官方基于.NET开源的高性能分布式缓存存储数据库
    前言前不久Redis宣布从Redis7.4开始,将原先比较宽松的BSD源码使用协议修改为RSALv2和SSPLv1协议,该协议变化意味着Redis不再开源。今天给大家分享一款完全开源(MIT协议)、免费的Redis替代性项目产品:Garnet。Redis开源协议详情:https://github.com/redis/redis?tab=License-......
  • MySQL存储过程中如何使用ROLLBACK
    在MySQL存储过程中,可以使用ROLLBACK来撤销之前执行的所有未提交的更改。当与BEGIN和COMMIT结合使用时,ROLLBACK可以帮助您管理事务并确保数据的完整性。以下是一个示例存储过程,它使用TRY...CATCH块来捕获异常,并在需要时执行ROLLBACK。请注意,MySQL本身并不直接支持TRY...CATCH错误......
  • Vue 事件处理 传参 以及事件的修饰符 的学习
    事件处理在vue中使用v-on来进行监听事件,可以简写成@两种展示方式内联事件处理器(较为简单理解就行)方法事件处理器两者的区别就是内联事件处理器是直接写在v-on里面的,<button@click="count++">自增</button>方法事件处理器是写在js里面的<button@click="addCount">点......