0

在我买的一本 c 书中,给出了一个锻炼计划

以下代码段的输出是什么?

printf(3+"Welcome"+2);

我得到的答案是我(通过在 TC++ 中执行)

但我无法得到实际的机制。请解释一下它背后的实际机制。

4

3 回答 3

9

这称为指针算术:2+3=5,“me”是从偏移量 5 开始的字符串的其余部分。

PS:扔掉那本书。

于 2011-09-18T12:17:02.103 回答
3

编译后,“Welcome”字符串变为const char *,指向字符串的第一个字符。在 C 中,使用字符串(如任何指针),您可以进行指针运算。这意味着指针 + 5 指向指针之外的 5 个位置。

因此 ("Welcome" + 5) 将指向 "W" 之后的 5 个字符,指向子字符串 "me"。

在旁注中,正如其他人所建议的那样,这听起来不像一本好书。

于 2011-09-18T12:19:23.473 回答
2

字符串(如"Welcome")是由 NUL 字符终止的字符数组(实际上是"Welcome\0")。

您正在做的是访问它的第五个字符(3 + 2 = 5)。这个字符是'm'(数组索引从 0 开始)。

printf将继续阅读,直到它击中 NUL 字符。

于 2011-09-18T12:17:18.857 回答