c語言中voidfunvoid什麼意思

2021-03-04 09:01:12 字數 7321 閱讀 2053

1樓:路堯家的顧小言

void fun (void)是乙個函式

來,表自示函式名為fun,函式返回值為空bai,引數為空。

void翻譯為「無類du型」。常用在程式編zhi寫中對定義dao函式的引數型別、返回值、函式中指標型別進行宣告。

2樓:

void在c語言裡的語義如下:

1、當函式的返回值是void,說明該函式是沒有返回值的,即為空;

2、如果函式的形參列表為空,即沒有形參,可以預設不寫,也可以顯式加上void。

3樓:匿名使用者

void fun(void);//第乙個void 是返回值 第二個void是形參列表

//返回值void表示返回不返回任何有內用的資訊,只容執行一些操作//void形參列表 表示函式呼叫不需要任何引數,即沒有形參

4樓:匿名使用者

這個函式就是不傳遞引數

5樓:杯具隱士

無返回的意思,也就是說這個函式沒有返回值

6樓:窮圖末錄

函式fun既不需要引數,也不會返回資料

c語言中void是什麼意思

7樓:匿名使用者

void 被翻譯為"無型別",相應的void * 為"無型別指標"。常用在程式編寫中對定義函式的引數型別、返回值、函式中指標型別進行宣告。

void 的作用

1.對函式返回的限定,這種情況我們比較常見。

2.對函式引數的限定,這種情況也是比較常見的。

一般我們常見的就是這兩種情況:

(1)當函式不需要返回值值時,必須使用void限定,這就是我們所說的第一種情況。例如:void func(int a,char *b)。

(2)0當函式不允許接受引數時,必須使用void限定,這就是我們所說的第二種情況。例如:int func(void)。

8樓:鄙視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);

9樓:匿名使用者

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);

10樓:匿名使用者

void是指此函式沒有返回值,而main是函式名,void main 是無返回值的主函式。

c語言是一種結構化的語言,以函式為模組,而無論程式多麼大,主函式有且只能有乙個。

關於什麼時候用,這個要看你想把主函式寫到什麼位置了,無論你把主函式寫到什麼位置,c語言總是先從主函式開始執行的。

11樓:匿名使用者

void 的字面意思是「空型別」,void *則為「空型別指標」,void *可以指向任何型別的資料。

看這裡,很詳細

12樓:匿名使用者

void就無需返回值的函式型別符

13樓:善緣戀

定義的什麼 函式就返回什麼 void就是返回空 說白了 就是什麼都不返回 返回值 知道嗎

14樓:泥潭裡的金魚

void中最有用的屬"void*"這個萬能的型別定義了;可以代表任何型別,這個方便我們去寫各種介面,解耦的時候很方面將各種結構體封裝起來,不暴露給使用者:

void* func_get_info()

15樓:不典章佳元綠

【void的含義】

void的字面意思是「無型別」,void

*則為「無型別指標」,void

*可以指向任何型別的資料。

void幾乎只有「註釋」和限制程式的作用,因為從來沒有人會定義乙個void變數,

void真正發揮的【作用】在於:

(1)對函式返回的限定;

(2)對函式引數的限定。

16樓:百將帥先行

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語言中1101怎麼理解,c語言中110為什麼會是1啊,還有210為什麼是2。。請回答者說的簡單易懂點。

在c語言中是乙個取餘數的符號 在本題中1 10就是1 10後取餘數,而1不夠除以10,所以取商等於0,根據餘數 被除數 除數 商 1 10 0 1,即得餘數為一 所以輸出1 1除以10不夠除,又把1還回來了 同理,2除以10,也不夠除,所以餘數還是原來的2 1 10 0.1 請複習數學知識 是求餘 ...

c語言中怎樣跳出所有迴圈,c語言中break怎麼一次退出多個迴圈

c語言要跳出所有迴圈,可以使用goto語句。在所有迴圈外,定義乙個標識,通過goto語句直達該標識,起到跳出所有迴圈的作用。比如while 1 exit all loop 跳出迴圈後需要執行的語句 不過,在結構化程式設計中並不推薦使用goto語句,所以如果goto被禁用,有跳出所有迴圈的需求時,可以...

c語言中752,為什麼,在C語言中type怎麼使用

表示為取餘,5 10的值為0。中除數與被除數都須為整數。3 2為 1,3 2為1。取餘後的結果與被除數的符號一致。x 5 x 5 5 x 5 5 2 5 3 5 3 在c語言中type怎麼使用 typedef常用抄來自定義型別,比如 typedef int a 那麼你就可以使用a去定義int形的變數...