while循环中的哪个语句将首先执行?

时间:2014-10-05 10:46:31

标签: c string pointers while-loop char

在这个示例程序中,在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也打印

3 个答案:

答案 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)

在上述程序中,我已经写完了该过程的完整描述。

请参阅以下内容:

enter image description here

另外:

enter image description here

答案 2 :(得分:0)

它不是它的行为方式。当您使用后增量时,所有* ss的fisrt将从字符串获得ss [0]并在* tt(tt [0])中分配,然后指针将递增,并且在下一次迭代中ss [1]将被复制到tt中[1]等等。所以在tt字符串中,你将获得与ss中完全相同的字符串