You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中字符数组与字符指针定义字面量的存储方式解析

字符指针与字符数组的字符串字面量存储机制差异

1. 字符指针指向字符串字面量的情况

对于 char *test = "instatic";:

  • 字符串字面量 "instatic" 会被编译器放在静态只读存储区(通常是程序的 .rodata 段),该区域内容在程序运行全程存在,且不可修改(修改会触发未定义行为)。
  • 如果 test 是局部变量,它本身存储在栈上,但其值是静态存储区中该字符串首字符的内存地址。

2. 字符数组用字符串字面量初始化的情况

对于 char test[] = "instatic?";:

  • 这里的字符串字面量仅作为初始化数据源,编译阶段会被暂存到静态存储区,但运行时行为分两种场景:
    • 若 test 是局部数组(比如函数内部定义):编译器会在栈上分配一块长度等于字符串长度+1(包含终止符 '\0')的内存,再把静态存储区里的字面量内容完整复制到栈上的数组中。此时数组 test 拥有独立内存空间,内容可修改,和静态区的原字面量无关联。
    • 若 test 是全局/静态数组:数组本身就存储在静态存储区,编译器直接用字面量内容初始化这块静态内存,无需额外复制操作。

简单总结:指针是直接指向静态区的字面量;数组是把静态区字面量的内容复制到自身的存储位置(栈或静态区),拥有独立的内存空间。

内容的提问来源于stack exchange,提问作者Aka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:32:08