void型別 C語言
阿新 • • 發佈:2019-02-09
void的字面意思是“無型別”,void *則為“無型別指標”,void *可以指向任何型別的資料。
定義一個void變數沒有意義,不妨試著定義:
void a;這行語句編譯時會出錯,提示“illegal use of type 'void'”。不過,即使void a的編譯不會出錯,它也沒有任何實際意義。void真正發揮的作用在於:(1) 對函式返回的限定;(2) 對函式引數的限定。眾所周知,如果指標p1和p2的型別相同,那麼我們可以直接在p1和p2間互相賦值;如果p1和p2指向不同的資料型別,則必須使用強制型別轉換運算子把賦值運算子右邊的指標型別轉換為左邊指標的型別。例如:123 | float * p1; int * p2; p1 = p2; |
1 | cannot convert from 'int*' to 'float*' |
1 | p1 = ( float ) * p2; |
123 | void * p1; int * p2; p1 = p2; |
123 | void * p1; int * p2; p2 = p1; |
1 | cannot convert from 'void *' to 'int *' 。 |
其中 連結串列的封裝用到過 void 資料型別
typedef void SeqList; 給void起別名為 SeqList
typedef void SeqListNode;
這樣做是為了使用者方便閱讀,
SeqList* SeqList_Create(int capacity); //這樣一看返回值就知道是返回值是連結串列
void * SeqList_Create(int capacity); //如果這樣,使用者一看只知道是返回指標,不知道具體的,可讀性很差
所以才會給void起別名,封裝好的底層函式,提供給使用者使用,使用者會給容易懂