1. 程式人生 > >C語言-void/void *

C語言-void/void *

void   c語言中,void為“不確定型別”,不可以用void來宣告變數。如:void a = 10;如果出現這樣語句編譯器會報錯:variable or field ‘a’ declared void。   在C語言中void 常常用於:對函式返回型別的限定和對函式引數限定     (1)對函式返回型別的限定:當函式不需要返回型別是必須用void 來限定返回型別,限定了函式的返回型別為void後函式不能有返回值;如:void fun(int a);   (2)對函式引數型別的限定:當函式不允許接受引數時必須用void 來限定函式引數,限定了函式的引數型別為void後函式不能有引數;如:int fun(void);   (3)沒有返回型別的函式預設返回型別是什麼?編譯器預設返回int型別,如果不需要返回值寫為void,這樣在編譯時就能檢查出異常。

void *    C語言中void * 為 “不確定型別指標”,void *可以用來宣告指標。如:void * a;   (1)void *可以指向任何型別的指標型別:     void *a = NULL;     int * b = NULL;     a  =  b   (2)void *可以賦值給任何型別的變數 但是需要進行強制轉換:     int * a = NULL ;     void * b ;     a  =  (int *)b;   需要注意的是:void* 在轉換為其他資料型別時,賦值給void* 的型別和目標型別須保持一致,否則可能不能準確的訪問到變數。原因是a指標指向的是b指標,把b指標儲存的地址給了a,這樣的話a指標指向一片記憶體的首地址,由於a指標保持的資料型別是int,所以在取值訪問時會取4個位元組資料,如果強轉為其他型別,那麼取值就是型別的位元組數。

  應用:     malloc返回的是void *型別,所以會在前面加型別強制轉換。