void指针及其对void数据类型的分配

时间:2019-04-24 16:17:06

标签: c pointers

问题在于使用void数据类型并为void变量分配了一些值。

#include<stdio.h>
#include<stdlib.h>
int main()
{
 void *pVoid;
 pVoid = (void*)0;
 printf("%lu",sizeof(pVoid));
 return 0;
}

第二行中分配给pVoid的东西。

2 个答案:

答案 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指针,可以保证进行比较   不等于指向任何对象或函数的指针。