2

我正在阅读 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 是一个 int 并且它被分配给一个数组中的一个 char?我是否正确理解了那部分?这里到底发生了什么?

4

2 回答 2

1

char并且int只是整数类型,这意味着它们代表一个整数。所以如果我有

char x = 2;
int y = 3;

如果我设置x = y,会发生什么?正是你所期望的,x得到了​​ value 2。可能让您感到困惑的是chars 只是数字。如果我有:

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

y持有什么?字符的ascii 代码'a',恰好是 97(十进制;0x61十六进制)。什么是x成立的?97,与 y 相同。字符只不过是一个数字,它在某些情况下碰巧以您在屏幕上看到的形状出现并识别为字母(或数字或标点符号)。

当您达到最大数字char(大多数机器上为 255 / 0xff)以上时,差异就出现了。在其类型的最大值之上,数字只是环绕(256 -> 0、257 -> 1、258 -> 2 等)

于 2013-06-12T02:36:14.830 回答
0

最初, in C, anint非常自由地用作通用值。它只是一个整数。从技术上讲,char它只是一个较小的 8 位数字。如果你愿意,你甚至可以声明一个int xthen 赋值x = 'a'。在C. 所以,是的,只要你知道你没有超过 255 的值(除非你真的打算) ,你就可以将inta分配给。char较旧的编译器甚至不会抱怨。默认情况下,现代C编译器至少会警告您隐式类型转换。

于 2013-06-12T02:30:37.770 回答