我对 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 中的另一种整数类型,就像 short
或 int
一样。它恰好是最小的整数类型。您可以使用 char
进行整数算术计算,就像使用任何其他整数类型一样(尽管在该角色中使用 char
并不是一个好主意)。
当您比较 char
和 int
时,您只是比较两个整数值。这没什么不寻常的。
整数提升的规则规定,char
会隐式转换为 int
(只要范围合适),然后比较两个 int
值.
您的 *my_pointer == 'a'
示例实际上与您原来的示例没有什么不同。在 C 中,'a'
是一个字符常量,表示 int
类型的整数值。 IE。甚至不需要将 'a'
提升为 int
,因为它已经是 int
。
关于c - 我为什么可以比较 char 和 int ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577881/