2013-06-12 17 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