函數的參數分為形參和實參兩種。
為什邡等地區(qū)用戶提供了全套網頁設計制作服務,及什邡網站建設行業(yè)解決方案。主營業(yè)務為做網站、成都網站制作、什邡網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
形參出現在函數定義中,在整個函數體內都可以使用,離開該函數則不能使用。實參出現在主調函數中,進入被調函數后,實參變量也不能使用。
形參和實參的功能是作數據傳送,發(fā)生函數調用時,主調函數把實參的值傳送給被調函數的形參從而實現主調函數向被調函數的數據傳送。
舉個例子:
定義一個函數s=f(a,b),功能是將a和b的差賦值給s,那么,a和b就是這個函數的兩個參數。
擴展資料:
C語言的參數傳遞方式
方法有3種方式:值傳遞、地址傳遞、引用傳遞
tips:
被調用函數的形參只有函數被調用時才會臨時分配存儲單元,一旦調用結束占用的內存便會被釋放
值傳遞和地址傳遞,傳遞的都是實參的一個拷貝
C語言中實參和形參之間的數據傳遞是單向的“值傳遞”,單向傳遞,只能由實參傳給形參,反之不行
輸出格式并沒有選擇%p而是選擇了%d,因為十進制的數看起來更直觀。
值傳遞
如果只是傳遞值的話:
#include stdio.h
//值傳遞傳值
void swap( int x, int y);
int main()
{
int a=2,b=3;
printf("before:實參為a,b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,a,b,b);
swap(a,b);
printf("after:實參為a,b\na=%d,地址為%d\nb=%d,地址為%d\n\n",a,a,b,b);
return 0;
}
void swap(int x,int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf("inside:形參為x,y\nx=%d,地址為%d\ny=%d,地址為%d\n\n",x,x,y,y);
}
C語言的函數定義格式是:
函數類型 函數名稱 ( 參數列表 )
{
//函數體
}
函數聲明,不是說明的格式是“函數定義格式”的第一行,然后加 “;”,即:
函數類型 函數名稱 ( 參數列表 );
特別地,在函數聲明中的參數列表中,不需要給出具體的變量名稱,但必須給出每個變量的類型。
匯編代碼gcc:
第一個問題的匯編:
movl $0,?%ebx
incl %ebx
incl %ebx
incl %ebx
movl %ebx,?8(%esp)
movl %ebx,?4(%esp)
movl %ebx,?(%esp)
call _func
匯編顯示,先將n自增了3次變?yōu)?,然后調用函數,因此都是3
第二個問題的匯編:
movl $3,?16(%esp)
movl $98,?12(%esp)
movl $2,?8(%esp)
movl $97,?4(%esp)
movl $1,?(%esp)
call _func2
可以看出參數對應的棧地址應該是連續(xù)的
另外,這個程序在VC6下的結果完全不一樣:
func for n++
? ?0 ? ? ? ? ?0 ? ? ? ? ?0
12ff2c ? ? 12ff30 ? ? 12ff34
func for ++n
? ?3 ? ? ? ? ?2 ? ? ? ? ?1
12ff2c ? ? 12ff30 ? ? 12ff34
func2
12ff24 ? ? 12ff28 ? ? 12ff2c ? ? 12ff30 ? ? 12ff34
但是最后的地址也是連續(xù)的。
此類問題知道上問過多次了,可以說沒有什么意義,結果與編譯器實現相關,實際編程沒有用處,除非寫代碼的人喜歡玩花俏
函數聲明時只需寫出形參類型。
函數定義時必須寫出形參類型和變量名。
C語言中的標準函數printf便使用這種機制。在聲明不確定形參的函數時,形參部分可以使用省略號“…”代替?!啊备嬖V編譯器,在函數調用時不檢查形參類型是否與實參類型相同,也不檢查參數個數。
擴展資料
示例
例如:
void ConnectData(int i,...)
在上面的代碼中,編譯器只檢查第一個參數是否為整型,而不對其他參數進行檢查。
對于可變參數的函數,需要進行特殊的處理。首先需要引用 stdarg.h 頭文件,然后利用va_list類型和va_start、va_arg、va_end 3個宏讀取傳遞到函數中的參數值。
這幾個宏的定義如下(在 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 )。
網站題目:c語言函數參數的規(guī)范 c語言中函數的參數
當前地址:http://m.rwnh.cn/article10/ddcphgo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供響應式網站、App設計、做網站、品牌網站建設、全網營銷推廣、虛擬主機
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)