📅  最后修改于: 2023-12-03 15:10:15.414000             🧑  作者: Mango
这个问题需要我们阅读以下代码片段,并回答问题。
int main()
{
void *p;
float f = 3.14;
p = &f;
printf("%d", *(int *)p);
getchar();
return 0;
}
下面哪个是上述程序的输出?
A. 3
B. 4
C. 说明符不匹配
D. 这不是一个有效的程序
B. 4
我们首先声明了一个 void 类型的指针变量 p,然后将变量 f 的地址赋值给它。变量 f 是一个浮点类型,它的大小在大多数机器上都是 4 个字节,而 int 类型的大小通常为 4 个字节。所以当我们打印 p 指针所指向位置的值时,它将从这里读取 4 个字节,这会导致输出的值通常是未定义的。在这个特定的例子中,它读取的值是经过另一次类型转换而保留下的,即通过使用 (int)p。这种方式向编译器发出请求,转换指针类型并将其解除引用,并将结果作为 int 类型读取。所以当我们打印它时,将会得到输出 '4' 。