对于初学者问题感到抱歉,但我已经写了这段代码:
#include <stdio.h>
int main()
{
int y = 's';
printf("%c\n", y);
return 0;
}
编译器(Visual Studio 2012)不会警告我可能丢失数据(例如从int
到float
)。
我在谷歌找不到答案(或没有正确搜索)
我想知道这是否因为int
在内存中的存储空间为4而且可以将{1}存储为1 {1}}。
我不确定这一点。
提前致谢。
答案 0 :(得分:5)
是的,没关系。字符只是小整数,所以当然较小的值适合较大的int
变量,没有什么值得警告的。
许多标准C函数使用int
来传输单个字符,因为它们也可以表达EOF
(不是字符)。
答案 1 :(得分:1)
在C中,所有字符都根据ASCII standard存储在整数中并作为整数处理。这允许使用strcmp()等函数。
答案 2 :(得分:1)
char
只是一个8位整数
int
是一个更大的整数(在MSVC 32位构建上,它应该是4个字节)。
's'
对应于小写字母's'的ASCII code,即它是115的整数。
因此,您的代码类似于:
int y = 115; // 's'
答案 3 :(得分:0)
尽管出现了示例中的任何地方都没有char
。
由于历史原因,字符常量实际上是int
s所以行
int y = 's';
实际上是将一个int
分配给另一个。
此外,printf中的%c格式说明符实际上希望接收int
参数,而不是char
。这是因为default argument promotions应用于可变参数,因此在调用函数之前,对printf的调用中的任何char
都会被提升为int
。