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