结果如何:
#include<stdio.h>
int main(void)
{
printf("%d", "abcde" - "abcde");
}
在C等于-2? 请详细解释
答案 0 :(得分:3)
一些编译器使用与单个地址相同的内容来优化静态字符串(字符串实习)。
如果你正在使用这样的编译器,结果当然是0(指针算术)。
如果您使用的编译器没有实习字符串(或错过某些内部连接),则结果是未定义的。如果指针不相关,则指针算术无效。你只是垃圾。
答案 1 :(得分:1)
您的字符串“abcde
”和“abcde
”就是所谓的string literals。
字符串文字作为静态常量数据存储在程序的可执行文件中。究竟如何表示它们取决于多种因素,包括用于构建程序的工具链以及运行代码的平台。理解这一点非常重要,因为您观察到的行为无法得到保证。
执行减法时,实际上是在执行指针arithmetic between两个const char
指针,它们引用程序的静态常量数据。减法的结果可以告诉您链接器决定存储字符串数据的位置。