我看到這個算法網上扭轉一個字符串,我對此有些懷疑,我將在代碼的末尾註明:這個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);
我可以看到 「2009東海生日賀」。但是,如果我在函數reverseString的最後一行做printf("%s\n", original_string);
,我只是得到「leh」。這是爲什麼?
但是在while(original_string
數組在內存中表示爲單個內存塊,每個元素都放在前一個內存之後。因此,對於數組,指向元素的指針與其索引之間存在直接關係。 –
好吧,現在有道理!我忘了再問一件事。爲什麼從結果的外部打印字符串是正確的,但從方法的最後一行開始,我沒有得到完整的反轉字符串? –