關於void 型別的用法(相當於OC中的id型別)

2022-03-16 09:35:10 字數 756 閱讀 9497

1.c++語言在對於void* 型別的使用很特別,因為void* 可以間接引用任何其他資料型別的指標,比如int*、float*甚至抽象資料型別的指標,而且可以從void* 強制轉換為任何其他資料型別的指標,所以使用起來有時候會比較危險。如果開始將乙個void*的指標間接引用乙個float*的指標,然後將這個void*指標強制轉化為乙個int*型別的指標,編譯器不會給出錯誤甚至警告,但是輸出的資料卻匪夷所思,如果再強制轉換會float*則不會出現任何問題;

在後來發現,c++語言中(使用vs2005)任何資料型別的指標型別都可以互相強制轉化(我想應該是因為不同指標都是位址,每種資料型別的引用都具備相同位數的緣故),如果強制轉化為不同的資料型別之後再強制轉換回來則不會又任何問題,如果強制轉換為其他的資料型別進行運算,則資料不會是預料之中那樣的;

void main()

最後輸出的結果三個指標所指向的位址空間都是相同的,但是輸出的資料卻大不相同(我想應該是各種資料型別在儲存時候資料格式不一樣的緣故)。所以在寫程式的時候盡量不適用void*型別進行資料操作。

2.但是在進行程式設計的時候,比如設計乙個通用介面,在引數列表中有指標資料型別,但是在真正適用這個介面的時候並不知道每一次具體傳入的會是哪種資料型別的指標,所以設計這個引數的時候就可以設計為void* 型別的引數,在使用的時候每次傳進來乙個需要的資料型別的指標,因為void*可以間接引用任何資料型別的指標;之後在函式實現的內部再將這個傳入的指標由void*型別強制轉換為本來所需要的資料型別的指標進行解析和使用即可,感覺在mfc的自動生成的介面中很多都採用了這種設計方式。

關於void 型別的用法(目前自己所能想到的)

1.c 語言在對於void 型別的使用很特別,因為void 可以間接引用任何其他資料型別的指標,比如int float 甚至抽象資料型別的指標,而且可以從void 強制轉換為任何其他資料型別的指標,所以使用起來有時候會比較危險。如果開始將乙個void 的指標間接引用乙個float 的指標,然後將這個...

void指標 void 的用法

指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...

void指標 void 的用法

指標有兩個屬性 指向變數 物件的位址和長度 但是指標只儲存位址,長度則取決於指標的型別 編譯器根據指標的型別從指標指向的位址向後定址 指標型別不同則定址範圍也不同,比如 int 從指定位址向後尋找4位元組作為變數的儲存單元 double 從指定位址向後尋找8位元組作為變數的儲存單元 1.void指標...