指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址,所以不管你儲存的是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...