Это код, который я не понимаю, он просто меняет строку.
#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
.
Разве это не то же самое, что while(*q) ++q;
, так как q
никогда не будет 0? Как автор кода может убедиться, что q
или *q
будут 0?
Этот код исходит из этого вопроса: Как изменить строку на C или С++?