C語(yǔ)言中參數(shù)分為實(shí)際參數(shù)(實(shí)參)與形式參數(shù)(形參)。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),石阡網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:石阡等地區(qū)。石阡做網(wǎng)站價(jià)格咨詢:18980820575
實(shí)際參數(shù)是在調(diào)用時(shí)傳遞個(gè)該函數(shù)的參數(shù)。
形式參數(shù)是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來(lái)接收調(diào)用該函數(shù)時(shí)傳如的參數(shù)。
實(shí)際參數(shù)是在調(diào)用時(shí)傳遞個(gè)該函數(shù)的參數(shù).
舉一個(gè)很簡(jiǎn)單的例子:
#includestdio.h
int f(int b) // b為形參
{
return b;
}
void main()
{
int a=1;
printf("%d",f(a));// a為實(shí)參
}
匯編代碼gcc:
第一個(gè)問(wèn)題的匯編:
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)?,然后調(diào)用函數(shù),因此都是3
第二個(gè)問(wèn)題的匯編:
movl $3,?16(%esp)
movl $98,?12(%esp)
movl $2,?8(%esp)
movl $97,?4(%esp)
movl $1,?(%esp)
call _func2
可以看出參數(shù)對(duì)應(yīng)的棧地址應(yīng)該是連續(xù)的
另外,這個(gè)程序在VC6下的結(jié)果完全不一樣:
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ù)的。
此類問(wèn)題知道上問(wèn)過(guò)多次了,可以說(shuō)沒(méi)有什么意義,結(jié)果與編譯器實(shí)現(xiàn)相關(guān),實(shí)際編程沒(méi)有用處,除非寫(xiě)代碼的人喜歡玩花俏
main函數(shù)可以不帶參數(shù),也可以帶參數(shù),這個(gè)參數(shù)可以認(rèn)為是 main函數(shù)的形式參數(shù)。
C語(yǔ)言規(guī)定main函數(shù)的參數(shù)只能有兩個(gè),還規(guī)定argc(第一個(gè)形參)必須是整型變量,argv( 第二個(gè)形參)必須是指向字符串的指針數(shù)組。加上形參說(shuō)明后,main函數(shù)的函數(shù)頭應(yīng)寫(xiě)為:
int main (int argc,char *argv[])
由于main函數(shù)不能被其它函數(shù)調(diào)用,因此不可能在程序內(nèi)部取得實(shí)際值。那么,在何處把實(shí)參值賦予main函數(shù)的形參呢? 實(shí)際上,main函數(shù)的參數(shù)值是從操作系統(tǒng)命令行上獲得的。當(dāng)我們要運(yùn)行一個(gè)可執(zhí)行文件時(shí),在DOS提示符下鍵入文件名,再輸入實(shí)際參數(shù)即可把這些實(shí)參傳送到main的形參中去。
DOS提示符下命令行的一般形式為:
C:\可執(zhí)行文件名 參數(shù) 參數(shù)……
int main (int argc,char *argv[]) 或者 int main (int argc,char **argv)
其中第一個(gè)表示參數(shù)的個(gè)數(shù);第二個(gè)參數(shù)中argv[0]為自身運(yùn)行目錄路徑和程序名,argv[1]指向第一個(gè)參數(shù)、argv[2]指向第二個(gè)參數(shù)……
測(cè)試?yán)樱?/p>
#include stdio.h#include string.h
int main(int argc,char *argv[])
{
printf("argc= %d\n",argc);
while(argc--)
{
printf("%s \n",*argv++);
}
return 0;
}
c語(yǔ)言參數(shù),就是我們每次用這個(gè)函數(shù)時(shí),都對(duì)一些數(shù)做相同的工作,這些數(shù)我們就把它作為參數(shù),如int
function(a,b){return
a
b:}.a和b都為參數(shù),我們每次用到這個(gè)函數(shù)時(shí)都是求a,b的和,但每次用時(shí)根據(jù)不同的需求a.b的值會(huì)不同,但函數(shù)中對(duì)他們的操作總是不變。明白了吧
分享文章:c語(yǔ)言函數(shù)參數(shù) c語(yǔ)言函數(shù)參數(shù)的傳遞
本文網(wǎng)址:http://chinadenli.net/article24/hjidce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、做網(wǎng)站、自適應(yīng)網(wǎng)站、、小程序開(kāi)發(fā)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)