浮点值转换为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是一种松散类型的语言。 允许将float
为char
。
为什么该计划是核心倾销?
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
变量中,因此当你打印时,得到-
作为输出。