在我买的一本 c 书中,给出了一个锻炼计划
以下代码段的输出是什么?
printf(3+"Welcome"+2);
我得到的答案是我(通过在 TC++ 中执行)
但我无法得到实际的机制。请解释一下它背后的实际机制。
在我买的一本 c 书中,给出了一个锻炼计划
以下代码段的输出是什么?
printf(3+"Welcome"+2);
我得到的答案是我(通过在 TC++ 中执行)
但我无法得到实际的机制。请解释一下它背后的实际机制。
这称为指针算术:2+3=5,“me”是从偏移量 5 开始的字符串的其余部分。
PS:扔掉那本书。
编译后,“Welcome”字符串变为const char *
,指向字符串的第一个字符。在 C 中,使用字符串(如任何指针),您可以进行指针运算。这意味着指针 + 5 指向指针之外的 5 个位置。
因此 ("Welcome" + 5) 将指向 "W" 之后的 5 个字符,指向子字符串 "me"。
在旁注中,正如其他人所建议的那样,这听起来不像一本好书。
字符串(如"Welcome"
)是由 NUL 字符终止的字符数组(实际上是"Welcome\0"
)。
您正在做的是访问它的第五个字符(3 + 2 = 5)。这个字符是'm'
(数组索引从 0 开始)。
printf
将继续阅读,直到它击中 NUL 字符。