这个reverseString算法如何工作?

我已经看到这个算法在线反转一个字符串,我对它有一些疑问,我将在代码的末尾指定:

void reverseString(char *original_string) { char *end = original_string; char tmp; if(original_string) { while(*end) { ++end; } --end; while (original_string < end) { tmp = *original_string; *original_string++ = *end; *end-- = tmp; } } //This line doesn't have the complete reversed string. Why? printf("%s\n", original_string); } 

1)在while循环中…为什么我们比较两个指针? 我们怎么知道价值会变大还是变小? 那些只是指针,对吧?

2)为什么我们不退货? 反转弦在哪里? 如果我们认为反向字符串在original_string中,我们是否应该使用指向指针的指针,以便效果在范围外?

3)如果我做以下事情:

 char test[] = "hello"; reverseString(test); printf("%s\n", test); 

我可以看到“olleh”。 但是,如果我做printf("%s\n", original_string); 在函数reverseString的最后一行,我只是得到“leh”。 这是为什么?

你有两个指针指向左边的部分的开头和结尾。 在每一步中,您交换这些指针指向的字符,然后减少从两个方向(开始和结束)反转的字符串。 比较指针具有以下含义 – 直到间隔的开始不是在间隔结束之后,我们仍然有一个反转间隔。 希望有道理。

您不需要返回任何内容 – 字符串在适当的位置反转,因此参数可以同时输入和输出。

3)在函数中,你获取指向字符串的指针的副本,你在执行期间修改它,所以当指针被最后一行修改时,它将不再指向字符串的开头,而是指向中间,它留在最后的地方。