如果我尝试在 C 中定义一个指向字符串文字的指针,会发生什么情况?

What happens if I try to define a pointer which points to a string literal in C?

例如,

char * first = "Hello World!";

我的问题是,

  1. 字符串文字是否存储在内存中? (如果是,我猜指针 first 是字符串文字“Hello World”的初始元素的地址)

  2. 如果不是,那么first中是否存储了某种随机指针值?

是的,字符串文字存储在内存中。 C 和 C++ 标准只是说字符串文字具有静态存储持续时间,任何修改它们的尝试都会产生未定义的行为,并且具有相同内容的多个字符串文字可能会或可能不会共享相同的存储空间。

是的,字符串文字存储在内存中,通常存储在 .rodata 部分

这取决于您的平台,它是实现定义的。一般情况下,它会进入 只读内存,如果您的系统可用的话。阅读更多 here.