学科分类
目录
C语言

void*指针

void为无类型,“void ”就是无类型指针,也称为空指针。空指针是一种可以指向任意类型的指针,也称为通用指针。通用指针指向的内存可以存放任意类型的数据,但程序无法正确解读该内存中的数据,访问空指针指向的数据会提示“不允许使用不完整类型”错误,因此,空指针在使用时需要强制转换为其他类型的指针进行访问。

接下来通过一个案例演示void指针的使用,如例1所示。*

例1 addr.c

 1  #include <stdio.h>
 2  int main()
 3  {
 4    int a = 1;
 5    int* p = &a;
 6    void* pp=p;
 7    printf("int类型的指针变量p的地址为:%p\n",p);
 8    printf("void类型的指针变量pp的地址为:%p\n", pp);
 9    printf("int指针p地址空间的值为:%d\n", *p);
 10   printf("void指针pp地址空间的值为:%d\n",(*(int*)pp));   //强制转换
 11   return 0;
 12 }

例1运行结果如图1所示。

图1 例1运行结果

在例1中,第5行代码定义了指针变量p存储变量a的地址。第6行代码定义了无类型指针变量pp并使用指针变量p对其进行初始化。第7~8行代码打印指针变量p与pp的值,由图5-9可知,两者指向同一个地址,即变量a的地址。第9~10行代码,打印指针变量p与pp指向地址空间的数据,很容易使用指针p获取变量a的值,使用void指针获取变量a的值需要强制转换为 ((int) pp)类型,即int 类型,然后通过间接访问获取指针pp指向空间的数据。

此外,void 类型的指针不允许进行算术运算,进行自增、自减、加减运算是错误的。void 通常用于函数的返回值类型,这样的函数也被称为“通用函数”,下一节讲解的内存操作函数,很多都使用了void作为函数返回值。

点击此处
隐藏目录