这是一段我不理解的代码,它只是将一个字符串反转。
#include <stdio.h>
void strrev(char *p)
{
char *q = p;
while(q && *q) ++q;
for(--q; p < q; ++p, --q)
*p = *p ^ *q,
*q = *p ^ *q,
*p = *p ^ *q;
}
int main(int argc, char **argv)
{
do {
printf("%s ", argv[argc-1]); strrev(argv[argc-1]);
printf("%s\n", argv[argc-1]);
} while(--argc);
return 0;
}
我不明白的唯一一段代码是这一行:
while(q && *q) ++q;
,它用于寻找eos
。既然q
永远不会为0,那么与while(*q) ++q;
不是一样吗?作者如何确保q
或*q
将为0?该代码来自于这个问题:如何在C或C++中原地反转字符串?
str*
是保留的。 - unwind