函數名后面的形式參數表列不可以是常量!
臺前網站建設公司創(chuàng)新互聯,臺前網站設計制作,有大型網站制作公司豐富經驗。已為臺前上千多家提供企業(yè)網站建設服務。企業(yè)網站搭建\外貿營銷網站建設要多少錢,請找那個售后服務好的臺前做網站的公司定做!
C語言中函數有三個概念:定義 聲明 調用
函數定義:自定義一個函數,并完成相應的代碼實現,如:
int?max(?int?a,?int?b?)?//小括號中的?a,?b被稱為形參,用來對應相應的實參,因為這里的形參可對應任意的實參值,所以,必須以變量形式體現。
{
return?(ab)?a:b?;?//返回a?b中的大數
}
函數聲明:用來描述一個函數的格式,在調用函數前列出。如:
int?max(?int?,?int?)?;?//這里可以省略形參變量,只列出形參類型即可。
函數調用:調用一個已實現的函數,完成相應的功能,如:
void?main()
{
int?x=5,y=10?;
printf(?"max?is?%d\n",?max(x,y)?);?//這里的x,y被稱為實參,可以是變量,也可以是常量。
printf(?"max?is?%d\n",?max(5,10)?);?//常量作為實參。
}
main函數可以不帶參數,也可以帶參數,這個參數可以認為是 main函數的形式參數。
C語言規(guī)定main函數的參數只能有兩個,還規(guī)定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字符串的指針數組。加上形參說明后,main函數的函數頭應寫為:
int main (int argc,char *argv[])
由于main函數不能被其它函數調用,因此不可能在程序內部取得實際值。那么,在何處把實參值賦予main函數的形參呢? 實際上,main函數的參數值是從操作系統命令行上獲得的。當我們要運行一個可執(zhí)行文件時,在DOS提示符下鍵入文件名,再輸入實際參數即可把這些實參傳送到main的形參中去。
DOS提示符下命令行的一般形式為:
C:\可執(zhí)行文件名 參數 參數……
C語言傳遞的是值而不是地址,這一點從VB轉過來的程序員一定要注意。否則不經意間就會犯錯誤。另外下層函數修改上層函數變量不是一種好習慣,容易引發(fā)錯誤。C語言中函數可以返回一個函數值,如果你需要返回多個函數值可以用下面的形式
fun(int *a, int *b)
{ *a=1;*b=2;}
main()
{ int a, b;
fun(a,b) a,b的值被改變
}
如果按VB的習慣,
fun(int a, int b)
{ a=1;b=2;}
main()
{ int a, b;
fun(a,b);a、b的值沒有改變
}
是錯誤的,main中的a,b和fun中的a,b完全是兩碼事,結果就是調運fun沒有任何效果。
分兩種,一種是按值傳遞,一種是按地址傳遞,按值傳遞就是在子函數中開辟出一個臨時內存空間,將傳遞的數值保存在這個空間中,當子函數結束后,這個內存空間就會釋放了!按地址傳遞則是把主函數開辟的某個內存空間首地址傳遞給子函數,子函數可以直接讀寫主函數上這段內存空間,當子函數結束后,這部分空間不會被釋放,主函數將繼續(xù)使用這段空間!
C語言中,函數調用的一般形式為:
函數名(實際參數表)
對無參函數調用時則無實際參數表。實際參數表中的參數可以是常數、變量或其它構造類型數據及表達式。各實參之間用逗號分隔。
#includestdio.h
int?fun(int?x,?int?y);?//?函數聲明,如果函數寫在被調用處之前,可以不用聲明
void?main()
{
int?a=1,?b=2,?c;
c?=?fun(a,?b);?//?函數的調用,調用自定義函數fun,其中a,b為實際參數,傳遞給被調用函數的輸入值
}
//?自定義函數fun
int?fun(int?x,?int?y)??//?函數首部
{??//?{}中的語言為函數體
return?xy???x?:?y;??//?返回x和y中較大的一個數
}
擴展資料
C語言中不允許作嵌套的函數定義。因此各函數之間是平行的,不存在上一級函數和下一級函數的問題。但是C語言允許在一個函數的定義中出現對另一個函數的調用。
這樣就出現了函數的嵌套調用。即在被調函數中又調用其它函數。這與其它語言的子程序嵌套的情形是類似的。其關系可表示如圖。
圖表示了兩層嵌套的情形。其執(zhí)行過程是:執(zhí)行main函數中調用a函數的語句時,即轉去執(zhí)行a函數,在a函數中調用b 函數時,又轉去執(zhí)行b函數,b函數執(zhí)行完畢返回a函數的斷點繼續(xù)執(zhí)行,a函數執(zhí)行完畢返回main函數的斷點繼續(xù)執(zhí)行。
參考資料:函數調用_百度百科
#include stdio.h
void fun(int * a,int k);
void main()
{
int a[10];
printf("請輸入10個整數:\n");
for(int i=0;i10;i++)
{
scanf("%d",a[i]);
}
fun(a,sizeof(a)/sizeof(a[0]));
}
void fun(int a[],int k)//這就是你想要的函數
{
int g0=0,t0=0,e0=0;/*g0就是0,t0就是小于0,e0就等0*/
for(int i=0;ik;i++)
{
if(a[i]0) g0++;
if(a[i]==0) e0++;
if(a[i]0) t0++;
}
printf("大于0的個數為:%d\n",g0);
printf("小于0的個數為:%d\n",t0);
printf("等于0的個數為:%d\n",e0);
}
/*
說明就和ichenq的差不多,只是ichenq的那個有問題,比如他的if語句里多了幾個";"號,導致無沒通過,另外我用他的函數來測試得不到想要的結果
sizeof(a)/sizeof(a[0])就是數組a的長度*/
文章標題:c語言函數的調用的參數,c語言中函數的形式參數的作用域
本文地址:http://jinyejixie.com/article46/hsiheg.html
成都網站建設公司_創(chuàng)新互聯,為您提供靜態(tài)網站、外貿網站建設、全網營銷推廣、網站營銷、品牌網站建設、Google
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯