在C語(yǔ)言中,函數(shù)的無(wú)參用關(guān)鍵字用void表示,如果一個(gè)函數(shù)的參數(shù)為void,當(dāng)我們調(diào)用此函數(shù)并給它傳遞一個(gè)參數(shù)時(shí),編譯器會(huì)給出錯(cuò)誤的警告,因?yàn)槟惆褏?shù)傳遞給了一個(gè)不接受參數(shù)的函數(shù)。 例: int func(void) { ... } int main(void) { func(5) ; /*It will cause an error .*/ ... return 0 ; } 這里注意一點(diǎn),在C語(yǔ)言中(而不是C++中),如果函數(shù)的參數(shù)什么也沒(méi)有,如int func(),那么此時(shí)你調(diào)用這個(gè)函數(shù)的時(shí)候放不放參數(shù)編譯器都不會(huì)給出警告,編譯器會(huì)認(rèn)為它是可有可無(wú)的,但這不是一個(gè)好方法,如果函數(shù)不需要任何參數(shù),那一定要顯式的把void加到參數(shù)列表里。 參數(shù)是什么呢,比如f(x) = 5x + 3 ;這里的x就是參數(shù)(可理解為做為參照的數(shù)),是形參,f(5)會(huì)得出一個(gè)值,f(10)又會(huì)得出一個(gè)值(顯然這是個(gè)雙射函數(shù),呵呵),那么這里的5 , 10都是實(shí)參(實(shí)際傳遞的參數(shù)),實(shí)參會(huì)替換形參的位置。 如: int func(int a , int b) { return a + b ; } 其中a , b是形參,調(diào)用時(shí) func(5,6) ; 那5 , 6就是實(shí)參,函數(shù)得到實(shí)參后會(huì)替換原來(lái)形參的位置,相當(dāng)于將5和6相加并返回結(jié)果。
目前創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、環(huán)翠網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
這是C的語(yǔ)法規(guī)定的,函數(shù)名的后面一定要帶括號(hào)。但括號(hào)里面不一定帶有參數(shù)。這要根據(jù)你的函數(shù)是否需要參數(shù)接口而定,像main()這個(gè)入口函數(shù)它就不需要用戶傳遞任何參數(shù)給它,所以就沒(méi)有提供參數(shù)接口(其實(shí)main是有帶有參數(shù)接口的,用來(lái)存放命令行的參數(shù),原型請(qǐng)自己在網(wǎng)上找)。而average函數(shù)是一個(gè)求平均數(shù)的函數(shù),試問(wèn)一下,如果你告訴系統(tǒng)你要對(duì)那些數(shù)求平均數(shù),你說(shuō)系統(tǒng)有這么神奇知道想求哪些數(shù)的平均數(shù)嗎?明顯是不可能的,那么要怎么讓系統(tǒng)知道你想求的數(shù)呢,那就要靠參數(shù)傳遞來(lái)實(shí)現(xiàn)。
函數(shù)聲明時(shí)只需寫出形參類型。
函數(shù)定義時(shí)必須寫出形參類型和變量名。
C語(yǔ)言中的標(biāo)準(zhǔn)函數(shù)printf便使用這種機(jī)制。在聲明不確定形參的函數(shù)時(shí),形參部分可以使用省略號(hào)“…”代替?!啊备嬖V編譯器,在函數(shù)調(diào)用時(shí)不檢查形參類型是否與實(shí)參類型相同,也不檢查參數(shù)個(gè)數(shù)。
擴(kuò)展資料
示例
例如:
void ConnectData(int i,...)
在上面的代碼中,編譯器只檢查第一個(gè)參數(shù)是否為整型,而不對(duì)其他參數(shù)進(jìn)行檢查。
對(duì)于可變參數(shù)的函數(shù),需要進(jìn)行特殊的處理。首先需要引用 stdarg.h 頭文件,然后利用va_list類型和va_start、va_arg、va_end 3個(gè)宏讀取傳遞到函數(shù)中的參數(shù)值。
這幾個(gè)宏的定義如下(在 ANSI C 中):
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
void va_start( va_list arg_ptr, prev_param )。
形參名可以省,形參的類型不要??;如int fact(int);以便編譯器識(shí)別形參和實(shí)參的類型是否匹配。