关于常量存储位置的问题

来源:4-2 C语言中的常量与变量

GengTeng

2020-06-25

下面的代码打印出来的两个变量的地址是相邻的,

int x = 11;
const int a = 12;
printf("%p, %p\n", &x, &a);
000000000061FE14, 000000000061FE10

并且当我强行修改const变量的值的时候也是可以做到的:

int *b = (int *)&a;
*b = 13;
printf("%d\n", a);
13

所以存储在只读区的应该是字面量(11, 12, 13),常量(a)仍然是在栈区吧?
在windows上使用mingw

写回答

1回答

李超

2020-06-30

msys2 的编译器可能有些问题或者windows 的机制就是这样的,你定义的const 变量,按说只能用const 指针访问,而且变量的内容不可改变;你可以用Linux 系统试一下;对于地址来说是有点小问题,全局的const 变量放在程序区,局部connst 变量在栈空间。

0
1
GengTeng
非常感谢!
2020-07-31
共1条回复

经典再升级-FFmpeg5.0核心技术精讲,打造音视频播放器

学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师

2726 学习 · 814 问题

查看课程