「void」是c/c++語言中最常見的乙個關鍵字,並不是所有學習c語言的人都能完全了解它的使用方法和技巧。
void字面意思是無型別;void*就是無型別指標,void*可以指向任何型別的指標。
眾所周知,如果指標p1和p2的型別相同,那麼我們可以直接在p1和p2間互相賦值;如果p1和p2指向不同的資料型別,則必須使用強制型別轉換運算子把賦值運算子右邊的指標型別轉換為左邊指標的型別。
例如:
float
*p1;
int*
p2;p1
=p2;
其中p1 = p2語句會編譯出錯,提示「'=' : cannot convert from 'int *' to 'float *'」,必須改為:
p1 =(
float
*)p2;
而void *則不同,任何型別的指標都可以直接賦值給它,無需進行強制型別轉換:
void
*p1;
int*
p2;p1
=p2;
但這並不意味著,void *也可以無需強制型別轉換地賦給其它型別的指標。因為「無型別」可以包容「有型別」,而「有型別」則不能包容「無型別」。例如:
void
*p1;
int*
p2;p2
=p1;
提示「'=' : cannot convert from 'void *' to 'int *'」。
即:任何型別的指標都可以附值給void*,無需進行強制型別轉換;但是void*不能附值給其他型別指標,必須經過強制型別轉換!
void*典型函式:
void
*memcpy(
void
*dest,
const
void
*src, size_t len);
void
*memset (
void
*buffer,
intc, size_t num );
函式的引數可以是任意型別指標,這樣任何型別的指標都可以傳進去(多偉大的設計啊
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...
mysql 索引深入理解 深入理解MySql的索引
為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...