このアルゴリズムがオンラインで文字列を反転するのを見てきましたが、コードの最後で指定するアルゴリズムについて疑問があります。
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つのポインターを比較するのですか?値が大きくなったり小さくなったりすることをどうやって知ることができますか?それらは単なるポインタですよね?
2)何も返さないのはなぜですか?逆の文字列はどこにありますか?逆の文字列がoriginal_stringにあることを示唆している場合、効果が外部スコープにあるように、ポインターへのポインターを使用するべきではありませんか?
3)次のことを行う場合:
char test[] = "hello";
reverseString(test);
printf("%s\n", test);
「オレ」が見えます。ただし、printf("%s\n", original_string);
関数reverseStringの最後の行で実行すると、「leh」が表示されます。何故ですか?