void (指標)的型別轉換 專講

2021-08-15 13:57:03 字數 1436 閱讀 3846

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址,所以不管你儲存的是int指標、float指標、long指標,對於儲存指標的記憶體來說都是分配同樣大小的記憶體的,這也為使用void指標可以儲存任意型別的指標打下了基礎

但是注意在使用void指標,要將其強制轉換為具體的指標型別,詳解使用方式如下。 (說白了就是位址,32位機子中任何乙個指標的長度都是4個位元組,因為邏輯位址就占用4位元組)

以下結果是基於vc++和vs2010的

1.c中對指標型別的轉換要求很低。但是這將留下乙個很大的漏洞

[cpp]view plain

copy

int*  a=null;     

void

* b=null;  

char

* c=null;  

c=a;    //warning c4133: 「=」: 從「int *」到「char *」的型別不相容,但是編譯能通過

b=a;    //將void*和其他型別的指標相互賦值不會出現警告,這在c語言中是允許的

c=b;  

2.c++中對型別要求很高,不允許不同型別指標之間的相互賦值,void指標例外(任何型別指標都可以賦值給void指標,但反之則不行)

[cpp]view plain

copy

int*  a=null;     

void

* b=null;  

char

* c=null;  

c=a;//出錯

b=a;//通過

c=b;//出錯

如果要賦值必須

顯示轉換

[cpp]view plain

copy

int*  a=null;  

void

* b=null;  

char

* c=null;  

c=(char

*)a;

//通過 

b=a;       //通過

c=(char

*)b;

//通過

3.那麼c/c++中void指標的這一特性有什麼用呢?請看如下源**

[cpp]view plain

copy

void

* __cdecl _memcpy_(

void

* dst, 

const

void

* src, 

size_t

count)

//當引數可以是任意型別指標的時候,就使用void*

return

(ret);  

}  

void型別及void指標型別

許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別的資料。vo...

void及void指標型別

1.概述 許多初學者對c c 語言中的void及void指標型別不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並 詳述void及void指標型別的使用方法與技巧。2.void的含義 void的字面意思是 無型別 void 則為 無型別指標 void 可以指向任何型別...

void型別及void指標

基於前面的一篇部落格模擬實現 memcpy 和 memmove 時用到的void 指標展開關於 void 和 void 指標的概述 1.void 相信大家不會陌生,經常定義無返回值的函式是用 void 定義,表示函式無需返回值 void fun void 2.void 的字面意思是 無型別 void...