在最近的帖子中C string to uppercase in C and C++ ,函数:
void strupp(char* beg)
{
while (*beg++ = toupper(*beg));
}
当给定“foobar”时,显示了“OOBAR”的不良结果,并给出了解释“表达式中没有序列点”的答案。现在我一直在用
char *s1=strTo, *s2= strFrom;
while (*s2) *s1++ = *s2++;
理解的话就是获取右边部分(*s2
)的值,递增s2
;将获得的值赋给*s1
并递增s1
。但似乎这两者都不包含序列点,因此它一直有效将是巧合(运气),我无法相信。
有人可以帮我解释一下吗?
最佳答案
结果
while (*beg++ = toupper(*beg));
取决于是先评估 LHS 还是先评估 RHS。
结果
while (*s2) *s1++ = *s2++;
不取决于是先评估 LHS 还是先评估 RHS。
这是关键的区别。因此,缺少序列点在第一种情况下很重要,但在第二种情况下并不重要。
关于c - 这是否包含序列点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33086538/