在初始化期间为指针指定字符串值时究竟会发生什么?

Euh*_*uhi 4 c memory string pointers

我很困惑,因为从我学到的东西,指针存储了他们指向的数据的地址.但在某些代码中,我看到在初始化期间经常分配给指针的字符串.

字符串究竟发生了什么?
指针是否自动指定一个地址来存储字符串并将其自身指向该地址?
"解除引用"如何在指向字符串的指针中起作用?

hac*_*cks 8

的情况下

char *p = "String";
Run Code Online (Sandbox Code Playgroud)

编译器为内存分配内存"String",很可能"String"存储在内存的只读数据部分,并设置指针指向p该内存地址的第一个字节.

p --------------+
                |
                |
                V
             +------+------+------+------+------+------+------+
             |      |      |      |      |      |      |      |
             | 'S'  | 't'  | 'r'  | 'i'  | 'n'  | 'g'  | '\0' |
             |      |      |      |      |      |      |      |
             +------+------+------+------+------+------+------+
              x100    x101   x102   x103   x104   x105   x106
Run Code Online (Sandbox Code Playgroud)

  • @SouravGhosh标准没有规定在哪里分配东西,它只表示写入字符串文字是未定义的行为.因此,即使目标系统缺少真正的ROM,也可以将存储字符串文字的存储器视为只读存储器.内存段通常称为`.rodata`. (2认同)