Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎么能把char和int进行比较呢?_C_Type Promotion - Fatal编程技术网

我怎么能把char和int进行比较呢?

我怎么能把char和int进行比较呢?,c,type-promotion,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=='

我对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=='a'
这样的东西才能工作?

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

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

整数提升规则规定,
char
隐式转换为
int
(如果范围合适),然后比较两个
int


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

首先,
0b
不是整数常量的有效标准C前缀。因此,您需要确保遵循所使用平台的具体说明

也就是说,根据等式运算符(
=
)的规则,算术转换(整数提升)规则适用于操作数,前提是它们都是算术类型

引用
C11
,第§6.5.9章

如果两个操作数都具有算术类型,则通常的算术转换为 表演。[……]


您只需比较两个整数值。发生这种情况是因为
0b0000
是一个整数文本,并且在取消引用
my_指针
后得到的值将被提升为int

如果int可以表示原始类型的所有值,则该值将转换为int;否则,它将转换为无符号整数


当您取消引用my_指针时,会得到一个char,但随后它会被提升为int,其他指针也一样value@martin哇,我想你可能知道些什么。不幸的是,由于我是C语言的新手,也许对你提到的问题有一个更深入的解释,我很乐意接受。标准C规则在这里不适用,因为二进制整数常量
0b0000
不是语言的一部分。因此不能代替初学者的课程。你应该读一本C教科书,了解基本类型和转换规则。C中所有内置变量类型都会进行整数提升吗?@AlanSTACK:integer提升发生在小整数类型
[signed/unsigned]char
[signed/unsigned]short
在语言规范规定应该发生的上下文中。运算符
==
恰好就是这样的上下文之一。