我对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'
是一个字符常量,它表示type的整数值int
。也就是说'a'
,int
因为它已经是,所以甚至不需要升级到int
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句