C小测验——101 |问题4

null

#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
喜欢就支持一下吧
点赞11 分享