【发布时间】:2014-09-19 07:25:15
【问题描述】:
我编写了以下程序:
#include <stdio.h>
main()
{
if("ddd" == "ddd")
printf("equal");
else
printf("not equal");
}
输出是“相等”,但根据我的说法,输出应该是“不相等”,因为字符串文字存储在文字池或一些只读内存中(我猜这取决于操作系统),所以两个字符串应该有两个不同的地址,因为它们存储在内存中的不同地址。
以前,我做过相同类型的示例(一年前),当时输出“不相等”。现在,谁能告诉我,这是由于 C 标准的变化,还是我遗漏了什么?
【问题讨论】:
-
比较字符串使用
strcmp(). -
没有什么可以阻止编译器使用相同的地址进行优化,因为这里的字符串文字是 const。
-
为什么有人会做这样的事情?
-
@AlexisKing 这个问题问为什么它是平等的,而不是相反。所以从技术上讲,我认为不是重复的,尽管相同的答案可以回答这两个问题。
-
@YuHao 这个问题的答案确实回答了这个问题,提到编译器可能生成导致相等的代码,但它并不需要以一种或另一种方式C 标准。
标签: c