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

posted @ 2024-05-17 16:45  咸鱼书生  阅读(609)  评论(0编辑  收藏  举报