【发布时间】:2021-01-27 15:54:21
【问题描述】:
正如我在 C 中所理解的,char *x 等于字符串 x 中第一个 char 的地址。 在下面的代码示例中,当我在调试器中运行程序时,l 和 m 的值始终是相同的地址并且条件语句为真:
int main(void)
{
char *l = "hello";
char *m = "hello";
if (l == m)
printf("true");
}
我不明白为什么两个变量总是具有相同的值(地址)
【问题讨论】:
-
似乎是因为编译器认为相同的字符串只存储一次是合理的。
-
可能有一个编译器选项来共享/不共享字符串文字定义。
-
根据编译器的不同,许多人经常将重复的字符串文字折叠成只读数据段中的单个实例。这在 release 优化的构建中尤其经常启用。
-
tl;dr 相等的字符串文字可能有也可能没有相同的地址。
-
@anastaciu 已添加。
标签: c if-statement pointers c-strings string-literals