int可以包含char的值吗?

时间:2014-04-08 14:38:17

标签: c

对于初学者问题感到抱歉,但我已经写了这段代码:

#include <stdio.h>

    int main()
    {
        int y = 's';
        printf("%c\n", y);
        return 0;
    }

编译器(Visual Studio 2012)不会警告我可能丢失数据(例如从intfloat)。
我在谷歌找不到答案(或没有正确搜索) 我想知道这是否因为int在内存中的存储空间为4而且可以将{1}存储为1 {1}}。 我不确定这一点。

提前致谢。

4 个答案:

答案 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