📌  相关文章
📜  教资会网络 | UGC NET CS 2016 年 8 月 – II |问题 32(1)

📅  最后修改于: 2023-12-03 15:10:15.414000             🧑  作者: Mango

UGC NET CS 2016年8月-II |问题32

这个问题需要我们阅读以下代码片段,并回答问题。

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' 。