因为, C它是. 如果s指向的变量为0, 那*s, 就是假.那么*s++=*t++就不会执行.
但是, while(*s++=*t++)它是先把t自加后的值(不清楚是先自加还是先取值), 然后赋给*s++, 那么*s的值就是*t++的值了, 所以while是否循环取决于*t++的值.
而while(*s)它明显是取决于*s
再看C,
do while是必然先执行的, 然后再判断是否继续循环, 所以这时*s++就等于*t++了
while(*s++=*t++)
这里实现了四个操作。
1 *s = *t, 即将s指向内存赋值为t指向内存的值;
2 执行s的自加操作;
3 执行t的自加操作;
4 判断执行自加前的*s值,如果*s为0,那么退出循环。
可以写成等价的for循环。
for(; *s; s++, t++)
*s = *t;
*s++=*t++//这是一个赋值语句,返回值是*s++因此,括号里的一定是*s
while语句的停止条件是表达式不成立。但既然while判断了表达式,那表达式的结果就会被运算一次,而每运算一次会让*s++,*t++。也就是说,在退出循环的时候,s和t还加了1。
但是C选项中,只有*s不为0才会让*s++,*t++。所以最后一次没有加。
故答案选择B
请问你这道题目是在哪个平台做的