對(duì)于void類型深層探索
本文將對(duì)void關(guān)鍵字的深刻說明,并詳述void及void指針類型的使用方法與技巧,初學(xué)者對(duì)C/C++語言中的void及void指針類型不甚理解,因此在使用上出現(xiàn)了一些錯(cuò)誤。。。
1.void的含義
void的字面意思是“無類型”,void類型 *則為“無類型指針”,void *可以指向任何類型的數(shù)據(jù)。void幾乎只有“注釋”和限制程序的作用,因?yàn)閺膩頉]有人會(huì)定義一個(gè)void變量,讓我們?cè)囍鴣矶x:
這行語句編譯時(shí)會(huì)出錯(cuò),提示“illegal use of type 'void'”。不過,即使void a的編譯不會(huì)出錯(cuò),它也沒有任何實(shí)際意義。void真正發(fā)揮的作用在于:
(1) 對(duì)函數(shù)返回的限定;
(2) 對(duì)函數(shù)參數(shù)的限定。
眾所周知,如果指針p1和p2的類型相同,那么我們可以直接在p1和p2間互相賦值;如果p1和p2指向不同的數(shù)據(jù)類型,則必須使用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符把賦值運(yùn)算符右邊的指針類型轉(zhuǎn)換為左邊指針的類型。
- int function(void)
- {
- return 1;
- }
- 則進(jìn)行下面的調(diào)用是不合法的:
- function(2);
- 因?yàn)樵?FONT>C++中,函數(shù)參數(shù)為void的意思是這個(gè)函數(shù)不接受任何參數(shù)。
- 我們?cè)赥urbo C 2.0中編譯:
- #include "stdio.h"
- fun()
- {
- return 1;
- }
- main()
- {
- printf("%d",fun(2));
- getchar();
- }
因此,為了避免混亂,我們?cè)诰帉慍/C++程序時(shí),對(duì)于任何函數(shù)都必須一個(gè)不漏地指定其類型。如果函數(shù)沒有返回值,一定要聲明為void類型。這既是程序良好可讀性的需要,也是編程規(guī)范性的要求。
另外,加上void類型聲明后,也可以發(fā)揮代碼的“自注釋”作用。代碼的“自注釋”即代碼能自己注釋自己。規(guī)則二 如果函數(shù)無參數(shù),那么應(yīng)聲明其參數(shù)為void
在C++語言中聲明一個(gè)這樣的函數(shù):
- int function(void)
- {
- return 1;
- }
- 則進(jìn)行下面的調(diào)用是不合法的:
- function(2);
- 因?yàn)樵?FONT>C++中,函數(shù)參數(shù)為void的意思是這個(gè)函數(shù)不接受任何參數(shù)。
- 我們?cè)赥urbo C 2.0中編譯:
- #include "stdio.h"
- fun()
- {
- return 1;
- }
- main()
- {
- printf("%d",fun(2));
- getchar();
- }
編譯正確且輸出1,這說明,在C語言中,可以給無參數(shù)的函數(shù)傳送任意類型的參數(shù),但是在C++編譯器中編譯同樣的代碼則會(huì)出錯(cuò)。在C++中,不能向無參數(shù)的函數(shù)傳送任何參數(shù),出錯(cuò)提示“'fun' : function does not take 1 parameters”。所以,無論在C還是C++中,若函數(shù)不接受任何參數(shù),一定要指明參數(shù)為void。
【編輯推薦】