2014-10-22 54 views
-3
void reverse_string(char * string) 
{ 
    // Insert your code here 
    int i; 
    int length = strlen(string); 
    char* temp; // string is a pointer, so temp must be a pointer as well. 
      for(i=0; i<= length/2 ; i++) 
      { 
      temp = *(string +i); 
      *(string +i) = *(string + length-(1*i)); 
      *(string + length-(1*i))= temp; 
      } 
} 

爲什麼strlen函數中的字符串不需要'*'infront?我也得到了temp = *(字符串+我)的錯誤,但它工作時,我把char temp = ...。我認爲temp可以在for循環中工作,而不需要放入infront類型,因爲我已經在reverse_string函數中聲明瞭它,但是它沒有。C中的反向字符串函數

+0

您似乎完全困惑什麼類型,類型的值是什麼,以及對特定類型的值返回的操作(類型和值)。無論如何,它應該是C還是C++?請添加其中一個主標籤。 – Deduplicator 2014-10-22 01:51:43

+0

你需要明白什麼'*'意味着首先。 – 2014-10-22 01:51:53

+1

從任何C教程/書開始。 [tag-wiki](https://stackoverflow.com/tags/c/info)和[book list](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-和列表)是很好的起點。順便說一句:這個網站不適合輔導。 – Deduplicator 2014-10-22 01:54:41

回答

0

*ptr被稱爲取消引用指針;它相當於ptr指向的值。 在C中,我們通過指向該字符串中第一個字符的指針來訪問字符串。這就是爲什麼字符串被終止的原因,因爲你真的只知道字符串在內存中的起始位置。您只需將指針傳遞給strlen,*string就可以傳遞字符串中的第一個字符。

C還支持指針算術,在這裏你可以通過加入或減去指針來抵消指針,就像你會int。結果將是一個指針偏移它所指向的類型的大小乘以數字偏移量。 string + i給你一個指向string指向的第i個字符的指針;因此*(string + i)是一個字符,而不是一個指針,因爲您正在引用一個指向char的指針。所以,你不希望temp是一個指針,所以刪除它的聲明中的*。

+0

謝謝你的解釋! – Drift117 2014-10-22 02:05:09

+0

@Trey他們從來沒有聲稱已經低估了你的答案。 – 2014-10-22 02:06:52