在我买的一本c-book中,练习程序是
以下代码段的输出是什么?
printf(3+"Welcome"+2);
我得到的答案是我(在TC ++中执行)
但我无法得到实际的机制。 请解释一下它背后的实际机制。
答案 0 :(得分:9)
它被称为指针算术:2 + 3 = 5,“me”是从偏移量5开始的字符串的其余部分。
PS:扔掉那本书。答案 1 :(得分:3)
编译时,“Welcome”字符串变为const char *
,指向字符串的第一个字符。在C中,使用字符串(像任何指针一样),你可以做指针运算。这意味着指针+ 5指向超出指针的5个位置。
因此(“欢迎”+5)会将5个字符指向“W”之后的子字符串“me”。
另一方面,正如其他人所说,这听起来不是一本好书。
答案 2 :(得分:2)
字符串(如"Welcome"
)是由NUL字符终止的字符数组(实际上它是"Welcome\0"
)。
你在做什么,正在访问它的第五个字符(3 + 2 = 5)。此字符为'm'
(数组索引从0开始)。
printf
将继续阅读,直至达到NUL字符。