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 修饰的变量可以存储在静态存储区、栈或常量存储区,具体取决于变量的声明位置和用途。