void是无类型的意思

void是通用指针,

#include <stdio.h>

int main ()
{
   int num=1024;
   int *pi=&num;
   char *ps="FishC";
   void *pv;

   pv=pi;
   printf("pi:%p,pv:%p\n",pi,pv);
   pv=ps;
   printf("ps:%p,pv:%p\n",ps,pv);
   return 0;
}

结果

pi:000000000061FE04,pv:000000000061FE04
ps:0000000000404000,pv:0000000000404000

可以发现地址一样

如果用上述打印字符串,不用写*,

如果要打印,就要这样写

#include <stdio.h>

int main ()
{
   int num=1024;
   int *pi=&num;
   char *ps="FishC";
   void *pv;

   pv=pi;
   printf("pi:%p,pv:%p\n",pi,pv);
   printf("*pv:%d\n",*(int *)pv);
   pv=ps;
   printf("ps:%p,pv:%p\n",ps,pv);
   printf("*pv:%s\n",(char *)pv);
   return 0;
}

结果

pi:000000000061FE04,pv:000000000061FE04
*pv:1024
ps:0000000000404000,pv:0000000000404000
*pv:FishC

用void指针时要好好检查

 

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为指针。

NULL 指针是一个定义在标准库中的值为零的常量。

#include <stdio.h>

int main ()
{
   int *p1;
   int *p2=NULL;

   printf("%d\n",*p1);
   printf("%d\n",*p2);
   return 0;
}

结果

7476081

报错,因为对NULL指针解引用是非法的,在c语言中

NULL不是NUL