我刚刚开始学习 C,对使用 int 和 char 声明字符感到相当困惑。
我很清楚,任何字符都是由整数组成的,因为字符的“整数”是字符各自的 ASCII 小数。
也就是说,我了解到完全可以使用int
不使用 ASCII 小数。例如。声明变量test
作为一个角色'X'
可以写成:
char test = 'X';
and
int test = 'X';
对于两个字符声明,转换字符是%c
(尽管测试被定义为int
).
因此,我的问题是使用声明字符变量之间的区别char
and int
以及何时使用int
声明一个字符变量?
区别在于变量的字节大小,以及变量可以保存的不同值。
需要使用 char 来接受 0 到 127(含)之间的所有值。所以在常见环境中它恰好占据
一个字节(8 位)。标准未指定它是有符号 (-128 - 127) 还是无符号 (0 - 255)。
int 要求至少是 16 位有符号字,并且接受 -32767 到 32767 之间的所有值。这意味着 int 可以接受 char 中的所有值,无论是后者有符号还是无符号。
如果你只想在变量中存储字符,你应该将其声明为char
。使用int
只会浪费内存,并可能误导未来的读者。该规则的一个常见例外是当您想要针对特殊条件处理更广泛的值时。例如函数fgetc
从标准库被声明为返回int
:
int fgetc(FILE *fd);
因为特殊的价值EOF
(文件结尾)定义为int
值 -1(2 补码系统中所有位都为 1)表示大于 char 的大小。这样,任何 char(在通用系统上只有 8 位)就不能等于 EOF 常量。如果该函数被声明为返回一个简单的char
,没有什么可以区分 EOF 值和(有效)字符 0xFF。
这就是为什么下面的代码是这样的bad并且永远不应该使用:
char c; // a terrible memory saving...
...
while ((c = fgetc(stdin)) != EOF) { // NEVER WRITE THAT!!!
...
}
在循环内部,一个 char 就足够了,但是为了使读取字符 0xFF 时测试不成功,该变量需要是一个 int。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)