c++中可以声明指向void类型的指针,指向void类型的指针称为void指针,此外,在声明指针时,还可以用关键字const进行修饰,用关键字const修饰的指针称为const指针。
1void指针
一般来说,只能用指向相同类型的指针给另一个指针赋值,而在不同类型的指针之间进行赋值是错误的。
//***********************************************************
int a,b;
int *p1=&a,*p2=p1;   //it's right
int a;
int *p1=&a;
double *p2=p1;       //it's wrong
//***********************************************************
注意:上述语句中的两个指针p1p2指向的类型不同,因此,除非进行强制类型转换,否则它们之间不能相互赋值
void指针是一个特例,C++语言允许使用空类型(void)指针,即不指定指向一个固定的类型,其定义格式为:
void *p
他表示指针变量p不指向一个确定的类型数据,它的作用是用来存放一个地址,void指针它可以指向任何类型的c++数据,也就是说,可以用任何类型的指针直接给void指针赋值。不过,如果需要将void指针的值赋值给其他类型的指针,则需要进行强制类型转换。比如:
int a;
int *p1=&a;
void *p2=p1;
int *p4=(int *)p2;
2const指针
如果在指针定义前加上关键字const,就包含一些特殊含义,而关键字const放在不同的位置表示的意义也不相同,主要如下:
关键字const放在指针类型前,就是声明一个指向常量的指针 。(const *p)此时,在程序中不能通过指针来改变它所指向的值,但是指针本身的值可以改变,即指针可以指向其他数据。
关键字const放在“*”号和指针名之间,就是声明一个指针常量(也称常指针)(* const p 。因此,指针本身的值不可以改变,也即它不能再指向其他数据,但它所指向的数据的值可以改变。
在指针类型前和“*”号和指针名之间都加关键字const,(const * const p),则就是声明一个指向常量的指针常量,指针本省的值不可以改变,它所指向的值也不能通过指针改变。
//*********************************************
#include <iostream>
using namespace std;
int main()
{
    int a=1;
    int *p1=&a;
    void *p2=p1;
    int *p3=(int *)p2;
    cout<<"*p3= "<<*p3<<endl;
    const int *p4;         //A pointer to a pointer constant
    p4=&a;
    int * const p5=&a;     //A pointer constant
    const int * const p6=&a;//A pointer to a constant pointer constant
    cout<<"*p5= "<<*p5<<endl;
    cout<<"*p6= "<<*p6<<endl;
    cout<<"p4= "<<*p4<<endl;
    cout<<"p4= "<<p4<<endl;
    return 0;
}
//***************************************************