这个while循环是如何工作的?当这个* s参数终止时?
void putstr (char *s)
{
while (*s) putchar(*s++);
}
其他值得注意的行为,争论的时间是什么?
答案 0 :(得分:4)
* s取消引用一个char,在循环中,零(0或'\ 0')将作为false,终止循环,所有其他非零字符保持为true。
答案 1 :(得分:4)
C中的逻辑表达式如果为0则求值为false,否则求值为true。因此,当*s
等于0时,循环将终止。在char
的上下文中,遇到空终止字符时。
请注意,++
的优先级高于指针解除引用*
,因此++
绑定到指针而不是指向它的char
。因此,循环体将为putchar
指向的字符调用s
,然后递增指针s
。
答案 2 :(得分:3)
char(*s
)被强制转换为int,条件是它保持任何整数!= 0被解释为true
,所以当遇到'\0'
char时循环和
答案 3 :(得分:1)
因为循环本身修改了s
(带有*s++
),所以while条件可以在每次循环时检查它,并且当指针指向一个空字符时它最终会终止。 / p>
答案 4 :(得分:1)
while (*s)
虽然s指向的字符不为零(也就是说,如果我们没有到达字符串的末尾)
putchar(*s++);
可以认为是
putchar(*s); // write the character pointed by s
s += 1; // go to next one
答案 5 :(得分:0)
s是字符串上的指针 字符串的结尾由0值
检测