c語(yǔ)言中標(biāo)準(zhǔn)函數(shù)指由標(biāo)準(zhǔn)頭文件定義和實(shí)現(xiàn)的函數(shù),即“系統(tǒng)自帶的”,用戶函數(shù)是由程序員自己定義實(shí)現(xiàn)的。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供泉山企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都做網(wǎng)站、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為泉山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
無(wú)參函數(shù)就是函數(shù)沒有定義參數(shù),有參函數(shù)就是函數(shù)定義了參數(shù)。
在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ù)什么也沒有,如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é)果。
如果是諸如函數(shù)聲明int fun(int b[]),這個(gè)是傳的地址,如果fun內(nèi)部有賦值操作,那么會(huì)改變數(shù)組b的元素的值
如果是執(zhí)行語(yǔ)句fun(b[i]);那么傳的就是b[i]這個(gè)值,執(zhí)行完fun后,b[i]的值不會(huì)變
a是一個(gè)指向指針的指針,a里面的內(nèi)容是另一個(gè)指針p的地址,那么*a就是p的地址,**a就是*p。
同理,b的內(nèi)容是另一個(gè)指針q的地址,*b就是q的地址,**b就是*q
t = *a, 那么t的內(nèi)容就是p的地址,
*a = *b, a里面的內(nèi)容變成了q的地址,即*a是q的地址,**a就是*q
*b = t, b里面的內(nèi)容變成了p的地址,即*b是p的地址,**b就是*p
這三句,將**a的值和**b的值互換了,是對(duì)指針的操作。
傳值方式:向函數(shù)傳遞參數(shù)時(shí),先復(fù)制一份參數(shù),然后才將復(fù)制品傳給參數(shù)。函數(shù)中所有對(duì)參數(shù)的操作,就只是在使用復(fù)制品。不會(huì)改變傳遞前的參數(shù)本身。
傳址方式:將地址傳送給函數(shù),函數(shù)對(duì)該地址的內(nèi)容操作,相當(dāng)于對(duì)實(shí)參本身的操作
void A(int a);
void A(int a, int b);
這些是有參函數(shù),也就是傳入?yún)?shù),你可以在函數(shù)體內(nèi)操作,對(duì)應(yīng)地在主函數(shù)調(diào)用函數(shù)時(shí)會(huì)傳入實(shí)參,如:A(a)。
viod A();
這是無(wú)參函數(shù),對(duì)應(yīng)在主函數(shù)調(diào)用函數(shù)時(shí)不會(huì)傳入?yún)?shù),如A()。
void
funtion1(void)
{
printf("funtion1是無(wú)參函數(shù)\n");
}
void
funtion2(int
x)
{
int
y;
y=x;
printf("funtion2是有參函數(shù)\n");
printf("參數(shù)的値是
%d",y);
}
mani()
{
funtion1();
funtion2(8);
}
這里所謂的有參和無(wú)參的參是指函數(shù)的參數(shù),也就是上例中的funtion(int
x)括號(hào)中的參數(shù)x
,該參數(shù)的類型是int型。funtion2(int
x)被調(diào)用時(shí)的形式如funtion2(8),也就是x=8,然后把參數(shù)値8傳進(jìn)函數(shù)funtion2,y=8;所以,主函數(shù)main()的運(yùn)行結(jié)果是,
funtion1是無(wú)參函數(shù)
funtion2是有參函數(shù)
參數(shù)的値是8
#include cstdlib
#include iostreamusing namespace std;
int calculate( int a, int b, int c )
{
return a*a*a+b*b*b+c*c*c;
}
int main(int argc, char *argv[])
{
int x, y, z, l;
cout " 計(jì)算等式的結(jié)果 " endl;
cout " ------------------------------------------------- " endl;
cout " 請(qǐng)輸入x,y和z的值: ";
cin x y z;
l = calculate( x, y, z );
cout " 這3個(gè)數(shù)的立方和是 " l endl;
system("PAUSE");
return EXIT_SUCCESS;
}
做好了,請(qǐng)檢查。。。