1樓:
void有兩種意思。抄第一種意思是無返回值,也就是說,void放在函式前面,那麼,函式結束的時候,不需要return什麼值(其實也可以寫return;);
第二種意思是任意返回值。這個意思,在某些應用上很有用。一般用來修飾指標。即void指標。
2樓:匿名使用者
void printhello(void)有些函覆數只是一些簡單的螢幕制列印,所以就不需要返回值。。。
而且一個函式只能有一個返回值,一般用於檢查函式執行的情況。。
如果一個函式要返回多個值,只能使用指標引數。。
3樓:冠興有瑞棋
一個函式
可以有返回值,也可以沒有。
如果有,則需指明型別,如:
char
*f(),返回回字串指標類答型資料,structptlf2(),返回一個結構型資料。
如果沒有,則需加void
指明,如
void
f2(),表示不返回任何型別資料。
有的c語言為了使用方便,省略表示返回整形資料,如f4(),表明函式f4()返回一個整形資料,系統編制者認為,返回整形資料最為多見。現在這樣的做法還存在,但已被大部分程式設計者拋棄了,因為這給**的閱讀和維護帶來了很多問題。
c語言中void是什麼意思
4樓:匿名使用者
void 被翻譯為"無型別",相應的void * 為"無型別指標"。常用在程式編寫中對定義函式的引數型別、返回值、函式中指標型別進行宣告。
void 的作用
1.對函式返回的限定,這種情況我們比較常見。
2.對函式引數的限定,這種情況也是比較常見的。
一般我們常見的就是這兩種情況:
(1)當函式不需要返回值值時,必須使用void限定,這就是我們所說的第一種情況。例如:void func(int a,char *b)。
(2)0當函式不允許接受引數時,必須使用void限定,這就是我們所說的第二種情況。例如:int func(void)。
5樓:鄙視04號
void真正發揮的作用在於: (1) 對函式返回的限定; (2) 對函式引數的限定。
void的字面意思是「無型別」,void *則為「無型別指標」,void *可以指向任何型別的資料。
void幾乎只有「註釋」和限制程式的作用,因為從來沒有人會定義一個void變數,讓我們試著來定義:
void a;
這行語句編譯時會出錯,提示「illegal use of type 'void'」。不過,即使void a的編譯不會出錯,它也沒有任何實際意義。
規則一:如果函式沒有返回值,那麼應宣告為void型別
在c語言中,凡不加返回值型別限定的函式,就會被編譯器作為返回整型值處理。但是許多程式設計師卻誤以為其為void型別。例如:
add ( int a, int b )
int main(int argc, char* argv)
程式執行的結果為輸出:2 + 3 = 5,這說明不加返回值說明的函式的確為int函式。
規則二:如果函式無引數,那麼應宣告其引數為void。
在c++語言中宣告一個這樣的函式:
int function(void)
則進行下面的呼叫是不合法的:
function(2);
因為在c++中,函式引數為void的意思是這個函式不接受任何引數。在turbo c 2.0中編譯:
#include "stdio.h"
fun()
main()
編譯正確且輸出1,這說明,在c語言中,可以給無引數的函式傳送任意型別的引數,但是在c++編譯器中編譯同樣的**則會出錯。在c++中,不能向無引數的函式傳送任何引數,出錯提示「'fun' : function does not take 1 parameters」。
所以,無論在c還是c++中,若函式不接受任何引數,一定要指明引數為void。
定義函式
返回值 函式名(引數1,引數2,引數3,.......)
{內容}
int sum(int a,int b)
{int c;
return c;}
其中第一個int是返回值 就是別的函式呼叫此函式時這個函式給他的一個值。
如果呼叫時不需要返回值,則函式寫為
void sum(int a,int b){....} 此時函式沒有返回值
如果不需要引數 則int sum(void){...}
此時void的意義為空,就是沒有引數的意思
如果都不要 則為void sum(void);
6樓:匿名使用者
void的意思就是樓主說的2個意思,這兩個意思都對。
void真正發揮的作用在於:
(1) 對函式返回的限定;
(2) 對函式引數的限定。
先給一個例子 定義函式
返回值 函式名(引數1,引數2,引數3,.......){內容}
int sum(int a,int b){int c;
return c;}
其中第一個int是返回值 就是別的函式呼叫此函式時這個函式給他的一個值。
如果呼叫時不需要返回值,則函式寫為
void sum(int a,int b){....} 此時函式沒有返回值
如果不需要引數 則int sum(void){...}此時void的意義為空,就是沒有引數的意思如果都不要 則為void sum(void);
7樓:匿名使用者
void是指此函式沒有返回值,而main是函式名,void main 是無返回值的主函式。
c語言是一種結構化的語言,以函式為模組,而無論程式多麼大,主函式有且只能有一個。
關於什麼時候用,這個要看你想把主函式寫到什麼位置了,無論你把主函式寫到什麼位置,c語言總是先從主函式開始執行的。
8樓:匿名使用者
void 的字面意思是「空型別」,void *則為「空型別指標」,void *可以指向任何型別的資料。
看這裡,很詳細
9樓:匿名使用者
void就無需返回值的函式型別符
10樓:善緣戀
定義的什麼 函式就返回什麼 void就是返回空 說白了 就是什麼都不返回 返回值 知道嗎
11樓:泥潭裡的金魚
void中最有用的屬"void*"這個萬能的型別定義了;可以代表任何型別,這個方便我們去寫各種介面,解耦的時候很方面將各種結構體封裝起來,不暴露給使用者:
void* func_get_info()
12樓:不典章佳元綠
【void的含義】
void的字面意思是「無型別」,void
*則為「無型別指標」,void
*可以指向任何型別的資料。
void幾乎只有「註釋」和限制程式的作用,因為從來沒有人會定義一個void變數,
void真正發揮的【作用】在於:
(1)對函式返回的限定;
(2)對函式引數的限定。
13樓:百將帥先行
1.10,void關鍵字
void有什麼好講的呢?如果你認為沒有,那就沒有;但如果你認為有,那就真的有。有點像「色即是空,空即是色」。
1.10.1,void a?
void的字面意思是「空型別」,void*則為「空型別指標」,void*可以指向任何型別的資料。void幾乎只有「註釋」和限制程式的作用,因為從來沒有人會定義一個void變數,看看下面的例子:
voida;
visualc++6.0上,這行語句編譯時會出錯,提示「illegaluseoftype'void'」。不過,即使voida的編譯不會出錯,它也沒有任何實際意義。
void真正發揮的作用在於:
(1) 對函式返回的限定;
(2) 對函式引數的限定。
眾所周知,如果指標p1和p2的型別相同,那麼我們可以直接在p1和p2間互相賦值;如果p1和p2指向不同的資料型別,則必須使用強制型別轉換運算子把賦值運算子右邊的指標型別轉換為左邊指標的型別。
例如:float *p1;
int *p2;
p1=p2;
其中p1=p2語句會編譯出錯,提示「'=':cannotconvertfrom'int*'to'float*'」,必須改為:
p1=(float*)p2;
而void*則不同,任何型別的指標都可以直接賦值給它,無需進行強制型別轉換:
void *p1;
int *p2;
p1=p2;
但這並不意味著,void*也可以無需強制型別轉換地賦給其它型別的指標。因為「空型別」可以包容「有型別」,而「有型別」則不能包容「空型別」。比如,我們可以說「男人和女人都是人」,但不能說「人是男人」或者「人是女人」。
下面的語句編譯出錯:
void *p1;
int *p2;
p2=p1;
提示「'=':cannotconvertfrom'void*'to'int*'」。
1.10.2,void修飾函式返回值和引數
【規則1-33】如果函式沒有返回值,那麼應宣告為void型別
在c語言中,凡不加返回值型別限定的函式,就會被編譯器作為返回整型值處理。但是許多程式設計師卻誤以為其為void型別。例如:
add(inta,intb)
intmain(intargc,char*argv)//甚至很多人以為main函式無返回值
//或是為void型的
程式執行的結果為輸出: 2+3=5
這說明不加返回值說明的函式的確為int函式。
因此,為了避免混亂,我們在編寫c程式時,對於任何函式都必須一個不漏地指定其型別。如果函式沒有返回值,一定要宣告為void型別。這既是程式良好可讀性的需要,也是程式設計規範性的要求。
另外,加上void型別宣告後,也可以發揮**的「自注釋」作用。所謂的**的「自注釋」即**能自己註釋自己。
【規則1-34】如果函式無引數,那麼應宣告其引數為void
在c++語言中宣告一個這樣的函式:
intfunction(void)
則進行下面的呼叫是不合法的:function(2);
因為在c++中,函式引數為void的意思是這個函式不接受任何引數。
但是在turboc2.0中編譯:
#include"stdio.h"
fun()
main()
編譯正確且輸出1,這說明,在c語言中,可以給無引數的函式傳送任意型別的引數,但是在c++編譯器中編譯同樣的**則會出錯。在c++中,不能向無引數的函式傳送任何引數,出錯提示「'fun':functiondoesnottake1parameters」。
所以,無論在c還是c++中,若函式不接受任何引數,一定要指明引數為void。1.10.3,void指標
【規則1-35】千萬小心又小心使用void指標型別。
按照ansi(americannationalstandardsinstitute)標準,不能對void指標進行演算法操作,即下列操作都是不合法的:
void*pvoid;
pvoid++;//ansi:錯誤
pvoid+=1;//ansi:錯誤
ansi標準之所以這樣認定,是因為它堅持:進行演算法操作的指標必須是確定知道其指向資料型別大小的。也就是說必須知道記憶體目的地址的確切值。
例如:int*pint;
pint++;//ansi:正確
但是大名鼎鼎的gnu(gnu'snotunix的遞迴縮寫)則不這麼認定,它指定void*的演算法操作與char*一致。因此下列語句在gnu編譯器中皆正確:
pvoid++;//gnu:正確
pvoid+=1;//gnu:正確
在實際的程式設計中,為符合ansi標準,並提高程式的可移植性,我們可以這樣編寫實現同樣功能的**:
void*pvoid;
(char*)pvoid++;//ansi:正確;gnu:正確
(char*)pvoid+=1;//ansi:錯誤;gnu:正確
gnu和ansi還有一些區別,總體而言,gnu較ansi更「開放」,提供了對更多語法的支援。但是我們在真實設計時,還是應該儘可能地符合ansi標準。
【規則1-36】如果函式的引數可以是任意型別指標,那麼應宣告其引數為void*。
典型的如記憶體操作函式memcpy和memset的函式原型分別為:
void*memcpy(void*dest,constvoid*src,size_tlen);
void*memset(void*buffer,intc,size_tnum);
這樣,任何型別的指標都可以傳入memcpy和memset中,這也真實地體現了記憶體操作函式的意義,因為它操作的物件僅僅是一片記憶體,而不論這片記憶體是什麼型別。如果memcpy和memset的引數型別不是void*,而是char*,那才叫真的奇怪了!這樣的memcpy和memset明顯不是一個「純粹的,脫離低階趣味的」函式!
下面的**執行正確:
例子:memset接受任意型別指標
intintarray_a[100];
memset(intarray_a,0,100*sizeof(int));//將intarray_a清0
例子:memcpy接受任意型別指標
intdestintarray_a[100],srcintarray_a[100];
//將srcintarray_a拷貝給destintarray_a
memcpy(destintarray_a,srcintarray_a,100*sizeof(int));
有趣的是,memcpy和memset函式返回的也是void*型別,標準庫函式的編寫者都不是一般人。
1.10.4,void不能代表一個真實的變數
【規則1-37】void不能代表一個真實的變數。
因為定義變數時必須分配記憶體空間,定義void型別變數,編譯器到底分配多大的記憶體呢。
下面**都企圖讓void代表一個真實的變數,因此都是錯誤的**:
voida;//錯誤
function(voida);//錯誤
void體現了一種抽象,這個世界上的變數都是「有型別」的,譬如一個人不是男人就是女人(人妖不算)。
void的出現只是為了一種抽象的需要,如果你正確地理解了物件導向中「抽象基類」的概念,也很容易理解void資料型別。正如不能給抽象基類定義一個例項,我們也不能定義一個void(讓我們類比的稱void為「抽象資料型別」)變數。
void簡單吧?到底是「色」還是「空」呢?
<<<<<<<<<<<<<,,,複製《c語言深度解剖》上的 >>>>>>>>>>>>>>>>>>>
c語言中void是什麼意思C語言中void是什麼意思
void 被翻譯為 無型別 相應的void 為 無型別指標 常用在程式編寫中對定義函式的引數型別 返回值 函式中指標型別進行宣告。void 的作用 1.對函式返回的限定,這種情況我們比較常見。2.對函式引數的限定,這種情況也是比較常見的。一般我們常見的就是這兩種情況 1 當函式不需要返回值值時,必須...
c語言中void函式的返回值是怎麼回事例如下面這
void 是沒有返回值的 如果要有返回值 void的地方改成返回值得型別 如 string int 等 然後再程式的最後一行 增加 return 你要返回的值即可 void 代表空返回值。即無返回值 所給的案例中,swap函式是一個無返回值函式但是該函式帶兩個輸入引數 當主函式呼叫該函式時 只需要給...
c語言,int與void不同點,在C語言中,int 函式與void 函式有什麼區別
一 指代不復 同1 int 是一種資料類制型,在程式語言中 bai,是用於定義整數類 du型變數zhi的識別符號。2 void 無類dao型 常用在程式編寫中對定義函式的引數型別 返回值 函式中指標型別進行宣告。二 特點不同 1 int 除了int型別之外,還有short long long lon...