void
實際上,如果把void 和int,char,double等型別放到一起理解的話,首先還是那句揭示本質的話:變數型別就是固定大小記憶體塊的別名,那麼void占用多大記憶體呢,編譯器並沒有定義void占用多大記憶體,所以對於void var; 這樣的定義,編譯器自然是不允許的,在vs中的錯誤提示是:不允許使用不完整的型別。
void*
void*指標不指向任何資料型別,它屬於一種未確定型別的過渡型資料,因此如果要訪問實際存在的資料,必須將void*指標強轉成為指定乙個確定的資料型別的資料,如int*、string*等。void *是乙個指標型別,指標變數都佔4byte記憶體(4byte=32 bit=2^32=4g,所以4byte就足以指向任何的記憶體位址了),所以對於void *p=null; 這樣的定義,編譯器可以為p分配記憶體。void*指標只支援幾種有限的操作:與另乙個指標進行比較;向函式傳遞void*指標或從函式返回void*指標;給另乙個void*指標賦值。
不允許使用void*指標操作它所指向的物件,例如,不允許對void*指標進行解引用。不允許對void*指標進行算術操作。
一、函式傳參時不確定型別,或者要支援多型別的傳參;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...