void指针

1.void*注意事项

①不能建立void类型的引用
②使用void* (void指针)类型,在给指针赋值时,必须把void指针强制转换为所需要类型的指针以保证赋值的正常进行。
③void除了可以作为函数的返回值外,还可以作为函数的参数类型 eg: int func(void){ return 0;}----有没有都可以
④void是不能直接修饰变量的:void x 是错误的--------因为变量需要分配空间,void无法确定分配多大的空间。
⑤void类型的指针称为“无类型指针”或“void型指针”,可以指向任何类型的数据
⑥类型不同的指针是无法赋值的。----但是,任何类型的指针都可以给void指针赋值

2.void指针的用处
①因为void指针可以指向任意类型的数据,使用void指针时把它所指向的数据抽象化了,可以增加程序的通用性。
②例子:
内存复制函数:dest是要复制的目的地址 src是要复制的源地址 len是要复制的地址长度
这也真正体现了内存复制的真正意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。

函数声明: void * memcpy(void *dest,const void *src,size_t len);

函数调用:
int intarray1[100],intarray2[100];
memcpy(intarray1,intarray2,100*sizeof(int));//将intarray2的复制给intarray1

 3.例子

void main(){
    int x=100;
    int *q=NULL;
    void *p=&x;
    //cout<<"*p="<<*p<<endl;//错误,非法使用指针p
    cout<<"*p="<<*(char*)p<<endl;//正确,输出指针p所指向单元的内容
    cout<<"*p="<<*(int*)p<<endl;
    cout<<"*p="<<*(float*)p<<endl;
    cout<<"*p="<<*(double*)p<<endl;
    //q=p;//错误,非法赋值,将void指针赋值给整型指针
    q=(int*)p;//正确,赋值时进行强制类型转换为int*型
    cout<<"*q="<<*q<<endl;
}

猜你喜欢

转载自www.cnblogs.com/sybil-hxl/p/10422649.html