浮点值转换为char

在下面的代码中,

#include int main(){ char array[] = {'1', 2, 5.2}; char* my_pointer = array[2]; printf("%c", *my_pointer); } 

5.2存储在内存中的IEEE 754表示中,由于小端格式, char从此浮点表示中选取8位(第一个)。

C是一种松散类型的语言。 允许将floatchar

为什么该计划是核心倾销?

 char* my_pointer = array[2]; 

是错的。 其中的RHS是char类型,而不是char* 。 在编译器中调高警告级别将帮助您识别这些问题。

使用gcc -Wall ,我收到以下警告:

 soc.c: In function 'main': soc.c:4:23: warning: initialization makes pointer from integer without a cast char* my_pointer = array[2]; 

之后,程序具有未定义的行为。

你需要的是:

 char* my_pointer = &array[2]; 

要么

 char* my_pointer = array + 2; 

在你的程序中更改char *my_pointer = array[2]; to char *my_pointer = &array[2]; 因为指针应该存储地址。

 #include int main(){ char array[] = {'1', 2, 45.2}; char *my_pointer = &array[2]; printf("%c", *my_pointer); } 

输出:

 - //NOTE: asci value of - is 45 

正如@AnT在评论中提到的,当你将45.2转换为char类型时,编译器将生成加载45.2代码,截断该值并将其作为45存储在char变量中,因此当你打印时,得到-作为输出。