关于const常量的存储位置

patricxuqi patricxuqi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
网上有说const常量存储于符号表里。于是做了下实验,但是实验结果好像并不完全是。个人认为应该这样说:符号表里存放的内容包括类中的静态常量和全局变量。不知这个断言对吗?以下是实验代码和结果。大家有什么看法?欢迎拍砖。
#include <iostream>
using namespace std;

const int i = 100;
int n = 0;

class CTest
{
public:
CTest():j(0),l(0){};
int l;
const int j;//静态成员变量必须由默认构造函数初始化
static const int k = 102;
};

void main()
{
CTest ct ;
int m = 0;
const int o = 0;

long addri = (long)&i;
long addrl = (long)&ct.l;
long addrj = (long)&ct.j;
long addrk = (long)&ct.k;
long addrm = (long)&m;
long addrn = (long)&n;
long addro = (long)&o;

cout<<"addr i="<<addri<<endl; //addr i=4290560(符号表)
cout<<"addr l="<<addrl<<endl; //addr l=1310556
cout<<"addr j="<<addrj<<endl; //addr j=1310560
cout<<"addr k="<<addrk<<endl; //addr k=4290564(符号表)
cout<<"addr m="<<addrm<<endl; //addr m=1310544
cout<<"addr n="<<addrn<<endl; //addr n=4297032(符号表)
cout<<"addr o="<<addro<<endl; //addr o=1310532
getchar();
}
...全文

相关推荐

static与const区别[项目源码]

本文详细介绍了static和const在编程中的作用与区别。static主要用于修饰局部变量、全局变量和函数,通过改变变量的存储位置(从栈区到静态区)来延长其生命周期或限制其作用域。const则用于定义常量,确保变量的值在初始化后不可被修改,常用于修饰常变量、静态字符串和函数参数,以防止意外修改。文章通过具体代码示例和内存区域分析,清晰地展示了二者的核心差异,帮助读者深入理解其应用场景和底层原理。

plant

C++类中的常量介绍

const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同

weixin_38606019

c#.net中const和readonly的区别

readonly修饰符用来表示只读,const用来表示不变常量。顾名思义,只读表示不能进行写操作;不变常量不能被修改。这两者到底有什么区别呢

weixin_38691006

C语言中Const指针变量(常指针)

Const指针变量只保护其Value值不被改变,并不能保护指针所指向的地址中的值不被改变,下面一起来学习一下

weixin_38609720

C语言const关键字详解[代码]

本文详细介绍了C语言中的const关键字,用于声明只读变量。const修饰的数据类型是常类型,其值不能被更新。文章从const的功能、存储位置(全局变量存储在常量区,局部变量存储在栈区)入手,并通过代码示例验证了不同变量的存储位置。此外,还详细讲解了const的用法,包括修饰变量、指针和函数参数及返回值。对于指针,区分了常量指针、指针常量和指向常量的常指针的不同特性。最后,文章还提到了const在函数参数和返回值中的应用,以及如何避免不必要的修改。

herb5
评论 29
收藏 已收藏
分享
返回顶部
patricxuqi
C++ 语言 65,214 成员 250,514 内容