1. 程式人生 > >void指針

void指針

tar code div col 引用 des 函數 除了 指針

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; }

void指針