#include "stdio.h"
int main()
{
void *pVoid;
pVoid = (void*)0;
printf("%lu",sizeof(pVoid));
return 0;
}
为上述C程序段选择最佳的语句。
(A)为pVoid分配(void *)0是不正确的,因为尚未分配内存。这就是为什么没有编译错误,但会导致运行时错误的原因。
(B)为pVoid分配(void *)0是不正确的,因为不能将硬编码值(此处为零,即0)分配给任何指针。这就是为什么会导致编译错误的原因。
(C)没有编译问题,也没有运行时问题。并且void指针的大小(即pVoid)将等于int的大小。
没有为void类型的指针定义(D) sizeof()运算符。答案: (C)
说明: (void *)0基本上是NULL指针,在C语言中有许多用途。请注意,无论指针的类型是什么,每个指针都保存一些地址,并且每个指针的大小等于sizeof(int) 。所以D)是不正确的。可以将绝对地址分配给任何指针,但是如果该地址非法则可能会在运行时导致问题。由于0是合法地址,因此将(void *)0分配给pVoid是可以的。所以B)是不正确的。在这里,我们没有对pVoid进行任何非法操作。因此,它不会导致任何编译/运行时错误。所以A)是不正确的。例如,如果我们对pVoid执行非法操作,例如取消引用空指针,即* pVoid,则将导致错误。上面的程序将编译/运行,没有任何问题。所以C)是正确的。
这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。