将在何处进行C中字符串的内存分配

pra*_*jul 6 c memory-management heap-memory stack-memory

对于下面给出的C语句,我想知道memmory分配将在何处进行.

char* ptr="Hello";//ptr is a automatic variable
Run Code Online (Sandbox Code Playgroud)

那么指针变量ptr将在堆栈上分配,但是这个字符串"Hello"将被分配到哪里.它是在堆栈上还是在堆上?那么初始化语句的内存分配如char ptr [] ="Hello";

cni*_*tar 12

标准没有说(它不知道"堆栈","堆"等).但实际上答案是:两者都没有.字符串文字将存储在数据部分中,通常位于只读页面中.

作为旁注,正如Als在评论中提到的那样,尝试修改字符串文字是未定义的行为.

  • 请注意,尝试修改字符串文字将导致未定义的行为.因此理论上声明应该是`const char*ptr ="Hello"`; (3认同)
  • @Als我不知道如何.可能是程序员打算稍后将`ptr`指向另一个内存区域,然后使用它来修改该区域.如果程序员想要一个指向`const char`的指针,声明应该是`const char*`. (2认同)