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作为函数返回值。