【发布时间】:2016-08-19 11:04:37
【问题描述】:
对于下面的程序
#include<stdio.h>
int main()
{
char str1[] = "India";
char str2[] = "BIX";
char *s1 = str1, *s2=str2;
while(*s1++ = *s2++)
printf("%s", str1);
printf("\n");
return 0;
}
如何评估 while 循环中的条件?我可以在堆栈溢出here 中看到类似的帖子,但他们没有解释 * 运算符如何比后缀运算符具有更高的优先级。但实际上,后缀运算符的优先级高于 * (取消引用)运算符。优先级表供我们参考here
请解释这段代码如何在输出下方打印
BndiaBIdiaBIXia
【问题讨论】:
-
不要使问题无效...但是您为什么要使用此代码?
-
*s1++是*(s1++) -
postincrement 优先级在这里并不重要,因为它是 postincrement。因此,简而言之,编译器首先意识到它需要在其他所有操作完成后递增指针。 在表达式被评估之后,增量仍然完成。
-
您的困惑可能是因为对链接问题的(已接受)答案完全是错误的(就像该问题的大多数其他答案一样)。
-
这被称为
K&R strcpy()(没有printf,只有“空”循环:while(*s1++ = *s2++) {;})
标签: c pointers operator-precedence