在这个示例程序中,在while循环中哪个部分将首先完成(增量,赋值,测试条件)。
int main()
{
char s[]="lumps,bumps,swollen veins,new pains";
char t[40]={};
char *ss,*tt;
tt=t;
ss=s;
while(*tt++ = *ss++);
printf("%s\n",t);
return 0;
}
以下程序的输出是:
lumps,bumps,swollen veins,new pains
有人可以告诉我这个程序如何提供输出以及while语句如何工作
如果我是正确的,首先将完成* ss ++,以便ss指向值'u',然后它将分配给* tt ++ ie(t [1])。所以如果它是这样的输出应该是“颠簸,颠簸,肿胀的静脉,新的痛苦”。 L不应该打印,但为什么L也打印
答案 0 :(得分:3)
你应该考虑到
1)运营商的优先事项; 2)并且未指定某些运算符的子表达式的评估顺序。 3)操作结果
运营商的优先事项如下:
1)后增量算子++ 2)解除引用* 3)作业
你可以更清楚地替换循环
while(*tt++ = *ss++);
这个
while( *tt = *ss )
{
++tt;
++ss;
}
它们之间的区别在于,在第二个循环中tt和ss不会增加,如果分配给* tt的* ss等于终止零' \ 0'。
为了理解最后一个循环,可以改写为
while( *tt = *ss, *tt != '\0' )
{
++tt;
++ss;
}
在条件
中使用逗号运算符您应该理解的是,postfix ++运算符的值是在递增之前其操作数的值。
答案 1 :(得分:1)
在上述程序中,我已经写完了该过程的完整描述。
请参阅以下内容:
另外:
答案 2 :(得分:0)
它不是它的行为方式。当您使用后增量时,所有* ss的fisrt将从字符串获得ss [0]并在* tt(tt [0])中分配,然后指针将递增,并且在下一次迭代中ss [1]将被复制到tt中[1]等等。所以在tt字符串中,你将获得与ss中完全相同的字符串