问题在于使用void数据类型并为void变量分配了一些值。
#include<stdio.h>
#include<stdlib.h>
int main()
{
void *pVoid;
pVoid = (void*)0;
printf("%lu",sizeof(pVoid));
return 0;
}
第二行中分配给pVoid的东西。
答案 0 :(得分:2)
直接从standard library wiki复制:
在stddef.h,locale.h,stdio.h,stdlib.h,string.h中定义, time.h。
在标准C中,这可以实现为:
#if !defined(NULL) #define NULL ((void*)0) #endif
因此pVoid
的分配与第二行中NULL
的分配完全相同。
编辑:正如@Jens Gustedt在评论中提到的,很高兴注意到NULL
的这种实现方式不是唯一的,并且可以依赖于平台。
答案 1 :(得分:1)
pVoid
分配了值NULL
。这是因为表达式(void*)0
被定义为空指针常量。
C standard的第6.3.2.3p3节规定:
整数常量表达式,其值为0,或者这样的整数 转换为
void *
类型的表达式称为空指针常量 。如果将空指针常量转换为指针类型,则 得到的指针称为 null指针,可以保证进行比较 不等于指向任何对象或函数的指针。