void 和void*的詳解
void和void*的詳解:
void指該資料無型別,void*指該指標無型別,可以指向任意型別
1. 如果函式沒有返回值,那麼應宣告為void型別;
2. 如果函式無引數,那麼應宣告其引數為void;
3. 如果函式的引數可以是任意型別指標,那麼應宣告其引數為void * ;
4. void不能代表一個真實的變數; 5.void 的主要作用是對函式的引數和返回的限定;
例: float *p1; int *p2; p1=p2; //此處將會報錯,需要用強制型別轉換。 換為void 就可以直接進行轉換了。 void *p1; int *p2; p1=p2;
但是把 p1給p2就會出錯了; void *p1; int *p2; p2=p1; //可以這樣理解,所有的男人和女人都是人,但是你可以說所有的人都是男人嗎?
下面給出void關鍵字的使用規則:
規則一 如果函式沒有返回值,那麼應宣告為void型別
在C語言中,凡不加返回值型別限定的函式,就會被編譯器作為返回整型值處理。但是許多程式設計師卻誤以為其為void型別 。例如:
add ( int a, int b )
{
return a + b;
}
int main(int argc, char* argv[])
{
printf ( "2 + 3 = %d", add ( 2, 3) );
}
程式執行的結果為輸出:
2 + 3 = 5
這說明不加返回值說明的函式的確為int函式 。
規則四如果函式的引數可以是任意型別指標,那麼應宣告其引數為void *
典型的如記憶體操作函式memcpy和memset的函式原型分別為:
void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );
這樣,任何型別的指標都可以傳入memcpy和memset中,這也真實地體現了記憶體操作函式的意義,因為它操作的物件僅僅是一片記憶體,而不