無型別與無型別指標

2021-08-10 19:00:35 字數 983 閱讀 6601

無型別,又為抽象型別:沒有對應的實體,不能直接定義變數,但可以定義指標。

(1)失去指標指向的功能;

(2)p指標此時不具有+1的能力。(在gcc編譯器下,無型別指標課加1。)

void*是一種特別的指標,因為它沒有指向的型別,或者說不能根據這個型別判斷出指向物件的長度。void *指標具有以下特點:

1.任何指標(包括函式指標)都可以賦值給void指標;

type *p;///不需轉換

vp=p;只獲得變數/物件位址而不獲得大小

2.void指標賦值給其他型別的指標時都要進行轉換;

type * p=(type *)vp;//轉換型別也就是獲得指向變數/物件大小

3.void指標在強制轉換成具體型別前,不能解引用;

*vp//錯誤,因為void指標只知道,指向變數/物件的起始位址,而不知道指向變數/物件的大小(佔幾個位元組)所以無法正確引用
4.void指標不能參與指標運算,除非進行轉換。

(type*)vp++;//等價於:vp=vp+sizeof(type)

void*的作用:

強制型別轉換

有時候由於過載等的干擾,導致需要轉換成void *,來進行取位址。

例如,(void *)obj.member,就可以取到member的位址;直接&(obj.member)取到的實際上是obj的開始位址。

指向0的位址

(void *)0,指向全是0的位址,相當於null。

void*無型別指標的例項:

#include#includeusing namespace std;

typedef struct tag_st

st;int main()

無型別的指標

void malloc size t size 開闢一塊連續size位元組的空間引入 int a 3 int a int malloc 3 sizeof int int i for i 0 i 3 i a i i for i 0 i 3 i printf d a i free a int n,i p...

C 空指標與無型別指標

c 用0表示空指標,c用 void 0表示空指標,c 對null的定義 undef null in case has defined it.ifdef gnug define null null else g ifndef cplusplus define null void 0 else c de...

關於無型別指標的使用

今天在工作時發現程式有可以優化的地方,程式中本來有乙個結構體a,然後a這個結構體中包含了若干個結構體bcdef等等。本意是將這若干個結構體的資料通過socket傳送出去,原本每乙個結構體都會有乙個傳送函式,現在想將它優化成乙個傳送函式。那麼問題來了?這個函式的形參怎麼設定?指向結構體中的結構體的指標...