2013-06-12 18 views
1

我在讀K & R,發現一個用來反轉字符串的函數。它似乎將一個int分配給一個char,反之亦然。我想知道如何以及爲什麼這是可能的?我知道我很可能會錯過一些非常明顯的事情。希望不會。 首先發布btw。在K&R書中int賦值給字符串反轉函數中的char?

void reverse (char s[]) 
{ 
    int c, i, j; 

    for (i = 0, j = strlen(s)-1; i < j; i++, j--) { 
    c = s[i]; 
    s[i] = s[j]; 
    s[j] = c; 
} 

c是一個整數,它被分配給一個數組中的字符? 我是否正確理解該部分? 這裏究竟發生了什麼?

回答

0

最初,在C中,int相當自由地用作通用值。這只是一個整數。技術上,char只是一個較小的8位數字。如果你願意,你甚至可以申報int x,然後分配x = 'a'C嚴格打字傳統上不是什麼大問題。所以,是的,只要你知道你不超過255的值(除非你真的打算),你可以指定一個intchar。舊的編譯器甚至不會抱怨。現代的C編譯器,默認情況下,至少會警告你隱含的類型轉換。

+0

有趣。非常感謝。 – pritchardsmith

0

charint只是整數類型,意味着它們表示一個整數。所以,如果我有

char x = 2; 
int y = 3; 

如果我設置x = y會發生什麼?正如你所期望的那樣,x得到值2。你可能會困惑的是,char只是數字。如果我有:

char x = 'a'; 
int y = x; 

y是什麼意思? ascii code爲字符'a',恰好爲97(十進制; 0x61,十六進制)。 x是什麼? 97,與y相同。字符只不過是一個數字,在某些情況下恰好出現在屏幕上看到的形狀,並被識別爲字母(或數字或標點符號)。

當您點擊最大的char(大多數機器上的255/0xff)以上的數字時,就會出現差異。在其類型的最大值以上,數字只是環繞(256-> 0,257-> 1,258-> 2等)。

+0

很好解釋。我現在一定明白。 – pritchardsmith