假设我有以下 C 代码
#include<stdio.h>
int main()
{
float a=3.14;
char j= a;
printf("%d\n", j);
return 0;
}
输出:3(如预期)
现在假设我使用指针做同样的事情。
#include<stdio.h>
int main()
{
float a=3.14;
char *j= (char*)&a;
printf("%d\n", *j);
return 0;
}
输出:-61
现在为什么我得到-61而不是3
编辑 从到目前为止的答案中,我了解到由于 char (通常)是 1 个字节长,所以 char 指针只选择第一个字节并给出-61而不是打印完整的浮点数。
但是,这里编译器如何确定数据类型的大小,以便它知道它必须在哪里停止打印。它是否由指针类型决定,因为它似乎通过答案到目前为止?
但理想情况下,在编译的词法阶段,创建符号表并且同时了解数据类型。
问题 所以,如果我使用 char 指针对编译器说,“嘿,伙计!只需打印您在我给出的 char 指针指向的位置找到的数据(类型)。”然后应该打印完整的浮点数因为编译器现在知道它是一个浮点数。?