|
1
1
在你的例子中发生了三件事。 首先,在C语言中,指针算术规则是这样的:两个指针可以相减以产生 在两个指针之间。例如:
哪里
第二件事是字符串文字,例如
第三件事是你的链接器已经执行了 重复字符串消除 . 它彻底搜索了代码中相同的字符串文字,并将其替换为单个指针。这部分观察结果取决于实现,可能不适用于所有工具链,甚至不适用于具有不同编译器/链接器设置的同一工具链。
打印字符串的前8个字符
更复杂的事情正在发生:
在第一种和第二种情况下,您可能会从第一种
关键是,您不能依赖于这种完全未定义/实现的行为(字符串消除,即指针算术和文字字符串指针行为定义良好)。作为链接器行为的检查,它很有趣,但作为编程技术,它并不有用。 |
|
|
2
1
字符串(带双引号),例如。
字符(带单引号),例如。
如果将指针强制转换为整数,则得到一个整数。 请记住,一些涉及指针的表达式可能没有很好的定义,但数据类型是。 |