此问题在此处已有答案:
Addresses of two char pointers to different string literals are same(10个答案)
3天前关闭。
好了,这里我们比较了指向字符串名称[10]或Michael(或类似的东西)的指针的内存位置
char name[10]="michael";
char name2[10]="michael";
if (name == name2) { printf("ok\n");
printf("OKAF\n");
}
当然,如果将计算为false,则什么也不会发生,但是:
char* name="michael";
char* name2="michael";
if (name == name2) { printf("ok\n");
printf("OKAF\n");
}
}
~
第三个例子:(这个也行)
char name="michael";
char name2="michael";
if (name == name2) { printf("ok\n");
printf("OKAF\n");
}
这里我们还比较了内存位置,除了在这种情况下,它的计算结果为真?
我的问题是,我提前为我的乏味道歉,我有点困惑,为什么一个比另一个更有效;我也看到过在不使用strcmp或类似工具的情况下比较两个字符串的实现。我在这里遗漏了什么,有人能用我能理解的语言向我解释一下吗?
我已经尝试了所有的3个,其中2个如预期的那样计算为真,但我仍然很困惑,为什么C中的IF语句==被认为是比较内存位置,为什么使用指针或初始化和定义不良的字符工作,如果它只被认为是比较内存位置。
1条答案
按热度按时间nqwrtyyt1#
第一个例子:您正在分配指向代码中两个不同位置的两个数组。结果:指针不相等。
第二:你有两个不同的指针指向同一个字符串。编译器可以优化这两个字符串,因为它们实际上是相同的,存储在你的程序的文本部分的同一个区域,导致比较成功。
第三:你不是在比较内存位置,你是在比较字符,它们碰巧是相同的。但是你应该得到一个警告,你正在给一个
const char *
赋值。