我们已经知道指针其实就是保存地址的变量,普通的指针可以修改自己的值来改变指针的指向,当然指针之间也可以相互赋值,但有一个前提,那就是指针类型必须相同
如:
int * a=NULL,*b=NULL;
float * c=NULL;
int x=1;
a=&x;
b=a; //正确,a,b类型相同
c=a; //错误,指针a,c是不同的类型
所以,在这中情况下,void指针就应运而生了。不过,有一点千万不要理解错哦,void指针不是不能指向任何类型,相反,这个指针可以指向任意类型的数据
但是,使用void指针时有两点需要注意:
①:在使用void指针时必须进行强制类型转换,将viod指针转换成它所指向的数据单元的实际类型后才能使用;
②:将viod指针赋值给普通指针时必须将viod指针转换成普通指针的实际类型
来看一个程序,差不多你就能明白了
#include<iostream>
using namespace std;
int main()
{
int x=1;
void * p=&x;
int *q=NULL;
//cout<<"*p="<<*p<<endl; //错误,使用void指针时必须将它强制转换成它所指向的单元的实际类型
cout<<"*p="<<*(int *)p<<endl;
//q=p; //错误,将void指针赋值给普通指针时,一定要进行强制类型转化成普通指针的类型
q=(int *)p;
cout<<"*q="<<*q<<endl;
return 0;
}