#include "stdio.h" int main() { void *pVoid; pVoid = ( void *)0; printf ( "%lu" , sizeof (pVoid)); return 0; } |
为上面的C程序片段选择最佳语句。 (A) 将(void*)0分配给pVoid是不正确的,因为尚未分配内存。这就是为什么没有编译错误,但会导致运行时错误。 (B) 将(void*)0指定给pVoid是不正确的,因为硬编码的值(此处为0即0)不能指定给任何指针。这就是为什么它会导致编译错误。 (C) 没有编译问题和运行时问题。空指针的大小,即pVoid,将等于int的大小。 (D) 没有为void类型的指针定义sizeof()运算符。 答复: (C) 说明: (void*)0基本上是空指针,在C中有很多用途。请注意,无论指针的类型是什么,每个指针都有一些地址,每个指针的大小都等于sizeof(int)。所以D)是不正确的。绝对地址可以分配给任何指针,但如果地址非法,则可能会在运行时出现问题。因为0是合法地址,所以将(void*)0分配给pVoid就可以了。所以B)是不正确的。我们没有对pVoid进行任何非法操作。因此,它不会导致任何编译/运行时错误。所以A)是不正确的。例如,如果我们在pVoid上执行非法操作,例如取消对void指针的引用,即*pVoid,则会导致错误。上述程序将编译/运行,不会出现任何问题。所以C)是正确的。 这个问题的小测验
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END