需要解释一个c程序

时间:2011-09-18 12:14:15

标签: c casting pointer-arithmetic

在我买的一本c-book中,练习程序是

  

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

printf(3+"Welcome"+2);

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

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

3 个答案:

答案 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字符。