C 中對void 的使用與理解

2021-09-25 22:23:37 字數 1385 閱讀 6785

void

實際上,如果把void 和int,char,double等型別放到一起理解的話,首先還是那句揭示本質的話:變數型別就是固定大小記憶體塊的別名,那麼void占用多大記憶體呢,編譯器並沒有定義void占用多大記憶體,所以對於void var; 這樣的定義,編譯器自然是不允許的,在vs中的錯誤提示是:不允許使用不完整的型別。

void*

void*指標不指向任何資料型別,它屬於一種未確定型別的過渡型資料,因此如果要訪問實際存在的資料,必須將void*指標強轉成為指定乙個確定的資料型別的資料,如int*、string*等。

void*指標只支援幾種有限的操作:與另乙個指標進行比較;向函式傳遞void*指標或從函式返回void*指標;給另乙個void*指標賦值。

不允許使用void*指標操作它所指向的物件,例如,不允許對void*指標進行解引用。不允許對void*指標進行算術操作。

void *是乙個指標型別,指標變數都佔4byte記憶體(4byte=32 bit=2^32=4g,所以4byte就足以指向任何的記憶體位址了),所以對於void *p=null; 這樣的定義,編譯器可以為p分配記憶體。

void* p=null;

int *a=null;

p=a;

double *b=null;

p=b;

char c[16]=;

p=c;

void* 就像一張白紙,任何型別的指標都可以直接賦值給void*型別的指標;

但是反過來

int *a=null;

a=p; //err

a=(int *)p;//需要強制型別轉換

一、函式傳參時不確定型別,或者要支援多型別的傳參

void function(int datatype, void* data) 

}

二、當函式的返回值不考慮型別指關心大小的時候

void * memcpy(void *dest, const void *src, size_t len);

void * memset ( void * buffer, int c, size_t num );

memcpy和memset對外置收任何型別的指標,這樣是合理並且必要的,因為這是記憶體操作函式,是對bit進行操作的,考慮資料型別是沒有任何意義的。

int *a=null;

a=(int *)malloc(sizeof(int));//返回的是void*,所以賦值給其他指標型別要強轉一下

同樣的,malloc函式只關注你要多大的記憶體,你需要把它怎麼劃分是你的事情,但是你需要顯式的表明你是怎麼劃分的。這裡語法要求是必須的,void *型別轉為其他型別必須強制型別轉換。

C 對try catch和void的簡單理解

最近學到c 前面都還好,但是學到函式這,我就有點矇圈了。尤其是看到try catch這裡,我真是不懂了。而對這個void好奇是因為今天翻譯,看到了這個單詞,結果一臉懵逼,所以看到這個詞就很親切正好自己理解的也不深,就主動去查了查,以下是我理解。try catch 第一開始,我是在vs裡按f1鍵查到的...

c c 中的void 與void 區別

c c 中的void和void 一 void void關鍵字表示 空型別 的概念。但是,這裡的 空型別 不表示 任意型別 而是表示不存在的意思,也就是說c c 不允許你寫語句void a,不存在型別為void的東西.void表示 不存在 的意思,可以從void的兩個應用中加以體現 1 void作為函...

C語言中的void的理解

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