c - 我为什么可以比较 char 和 int ?

标签 c type-promotion

我对 C 不太熟悉,所以我对该语言的类型安全有点困惑。

例如。

char* my_pointer;

my_pointer = malloc(sizeof(char));

if (*my_pointer == 0b0000)
{
    // this might be true or false, doesn't matter
}

代码是怎么运行的?为什么它不直接在*my_pointer == 0b0000处爆炸呢? ?

不应该*my_pointer返回一个字符?

所以从技术上来说不应该只是像 *my_pointer == 'a' 这样的东西可以工作吗?

最佳答案

C 语言没有专用的“字符”类型和一些孤立的“仅字符”语义。 char 只是 C 中的另一种整数类型,就像 shortint 一样。它恰好是最小的整数类型。您可以使用 char 进行整数算术计算,就像使用任何其他整数类型一样(尽管在该角色中使用 char 并不是一个好主意)。

当您比较 charint 时,您只是比较两个整数值。这没什么不寻常的。

整数提升的规则规定,char 会隐式转换为 int(只要范围合适),然后比较两个 int 值.

您的 *my_pointer == 'a' 示例实际上与您原来的示例没有什么不同。在 C 中,'a' 是一个字符常量,表示 int 类型的整数值。 IE。甚至不需要将 'a' 提升为 int,因为它已经是 int

关于c - 我为什么可以比较 char 和 int ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577881/

相关文章:

java - 类型提升和方法重载(多选)

java - 使用 byte、short 和 char 毫无意义

c - 使用初始数据读取串口会导致很多零

我们可以使用 main、printf、scanf 来命名标识符吗?

c++ - GetDC(NULL) 获取主监视器或虚拟屏幕?

c++ - 如何像内置类型一样提升两个模板类型进行算术运算呢?

c - 隐式转换如何处理有符号字符和无符号整数?

objective-c - 从 Swift 调用可变参数 Objective-C 函数

c++ - 动态包含一个 CUDA 文件

c - 类 C 语言中的提升顺序