可以在函數(shù)內(nèi)使用,請看下面的解釋,希望對你有幫助。

懷寧網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),懷寧網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為懷寧上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的懷寧做網(wǎng)站的公司定做!
函數(shù)的參數(shù)分為形參和實參兩種。
形參出現(xiàn)在函數(shù)定義中,在整個函數(shù)體內(nèi)都可以使用,離開該函數(shù)則不能使用。
形參和實參的功能是數(shù)據(jù)傳送,發(fā)生函數(shù)調(diào)用時,主調(diào)函數(shù)把實參的值傳送給被調(diào)函數(shù)的形參從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。
※※※※※※※※※※※第一個問題的答復(fù)※※※※※※※※※※※※※※※
看明白了你的意思,
其實不知道你自己有沒有注意到,你所嘗試的方法,
如果用C語言來做的話,其實就是實現(xiàn)了C語言的部分面向?qū)ο蟮膶崿F(xiàn),
說是"部分"的原因是,這僅僅是實現(xiàn)了面向?qū)ο蟮摹胺椒ā薄?/p>
如果想實現(xiàn)的話,準(zhǔn)確的講,應(yīng)該不是你所說的,將"函數(shù)"作為形參,
應(yīng)該是將“函數(shù)指針”作為形參。
這個在回調(diào)(CallBack)函數(shù)設(shè)計時,使用的非常多,
簡單舉一個例子:
#include stdlib.h
#include stdio.h
int Do1()
{
return 0;
}
int Do2(int num)
{
printf("The num is: %d\n", num);
return 0;
}
void CallBack1(void (*ptr)())//指向函數(shù)的指針作函數(shù)參數(shù)
{
(*ptr)();
}
void CallBack2(int n, int (*ptr)())//指向函數(shù)的指針作函數(shù)參數(shù),這里第一個參數(shù)是為指向函數(shù)的指針服務(wù)的,
{ //不能寫成void Caller2(int (*ptr)(int n)),這樣的定義語法錯誤。
(*ptr)(n);
return;
}
int main()
{
CallBack1(Do1); //相當(dāng)于調(diào)用Do1();
CallBack2(50, Do2); //相當(dāng)于調(diào)用Do2(50);
return 0;
}
※※※※※※※※※※※第一個問題的答復(fù)※※※※※※※※※※※※※※※
※※※※※※※※※※※補充問題的答復(fù)※※※※※※※※※※※※※※※
針對你的補充問題,解答如下:
這個是可變形參的實現(xiàn),準(zhǔn)確地說,不是通過數(shù)組實現(xiàn)的,而是通過棧實現(xiàn)的。
C語言中的printf,scanf就是最常見的可變形參函數(shù),定義一個可變形參的函數(shù)很簡單,如void print(int n, ...) ,函數(shù)中對參數(shù)的處理主要是通過對棧進行操作,而c函數(shù)的實參都是自右向左壓入棧的. 主要的棧操作(都是宏)有va_list,va_start ,va_arg,va_end, 定義如下:
typedef char * va_list;
#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) ~(sizeof(int) - 1) )
#define va_start _crt_va_start
#define va_arg _crt_va_arg
#define va_end _crt_va_end
#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _crt_va_end(ap) ( ap = (va_list)0 )
va_start(ap,v):主要是獲取可變參數(shù)列表的首地址,然后賦值給ap,近似ap=v+sizeof(v) (這里暫不考慮內(nèi)存對齊和類型轉(zhuǎn)換)
va_arg(ap,t):取得返回類型t的可變參數(shù)值, 并使ap指向下一個參數(shù): ap += sizeof(t),這里的t是可變參數(shù)的數(shù)據(jù)類型,如int,float之類
va_end(ap):給ap初始化
va_start(ap,v) va_arg(ap,t) va_end(ap)三者合用,保證程序的健壯性.
一個使用可變形參的簡單程序:
#include stdio.h
#include stdarg.h //包含va_list等定義
float sum( float first, ... ) //,...代表可變形參函數(shù)
{
float i=first,sum=0;
va_list maker; //va_list 類型數(shù)據(jù)可以保存函數(shù)的所有參數(shù),做為一個列表一樣保存
va_start(maker,first); //設(shè)置列表的起始位置
while(i!=-1.0)
{
sum+=i;
i=va_arg(maker,float); //返回maker列表的當(dāng)前值,并指向列表的下一個位置
}
return sum;
}
void main(void)
{
printf( "sum is: %f\n", sum( 2.0,8.0,8.5,-1.0 ) ); //函數(shù)調(diào)用
}
※※※※※※※※※※※補充問題的答復(fù)※※※※※※※※※※※※※※※
主函數(shù)的實參是由操作系統(tǒng)傳遞的。
c++規(guī)定的主函數(shù)標(biāo)準(zhǔn)格式(c語言未具體規(guī)定):int
main(int
argc,
char
*argv[])
其中int
argc
表示操作系統(tǒng)傳遞給程序的參數(shù)個數(shù),char
*argv[]
存儲各個參數(shù)。
例如:
若有程序如下:
int
main(int
argc,
char
*argv[])
{
int
i;
printf("您輸入了
%d
個參數(shù)\n分別是:",argc);
for(i=0;i
運行-
cmd
-
輸入
c:\app.exe
hello
world!
回車
執(zhí)行結(jié)果將是:
您輸入了
3
個參數(shù)
分別是:c:\app.exe
hello
world!
"
注意,第一個參數(shù)值將是你程序的文件名。
不知道函數(shù)調(diào)用原理的話,很難說得清楚的。粗略的說在C中函數(shù)其實是分成三個部分,分別是聲明、實現(xiàn)和使用。聲明就是告訴C有這么個函數(shù),實現(xiàn)就是這個函數(shù)的完整代碼,使用則是調(diào)用這個函數(shù)幫你做運算或者是做事情。為了讓函數(shù)能做更多的事情,就需要一種方法能向函數(shù)傳遞性息,最可靠、最方便的方法就是參數(shù)傳遞,C就是這樣做的。參數(shù)傳遞也不是簡單的一件事情,首先在調(diào)用者和被調(diào)用者之間得有個約定,大家約定好了參數(shù)放什么地方,如何使用,這個就稱為調(diào)用約定。現(xiàn)在我們回過頭來看什么叫實參和形參。由上面的敘述可以看到,函數(shù)其實有一定的獨立性的,參數(shù)是在調(diào)用約定下放在指定地方供函數(shù)使用的,在我們實現(xiàn)函數(shù)的時候,實際的參數(shù)是什么我們還不知道,但我們知道有多少參數(shù),分別是什么數(shù)據(jù)類型的和放在什么地方(順序),這個是由調(diào)用約定來保證的。我們知道的這些就是形式的或者說是邏輯的,我們在實現(xiàn)函數(shù)(編寫函數(shù)體)的時候需要給他們命名,以便使用,這些在函數(shù)實現(xiàn)的時候命名的形式上的參數(shù)就是形式參數(shù),簡稱形參。而在實際調(diào)用發(fā)生的時候,調(diào)用者會將實際的參數(shù)放在約定好了的地方,這個實際參數(shù)簡稱實參。函數(shù)被運行的時候?qū)崊⒑托螀⑿纬闪艘灰粚?yīng),對形參的操作就變成了對實參的操作。
對調(diào)用約定還有需要說明的就是,現(xiàn)在常用的調(diào)用約定都是傳值的,也就是說只是傳遞了一個副本,這樣做的結(jié)果就是你對形參的操作不會被傳遞出來。
是否可以解決您的問題?
形參:全稱為“形式參數(shù)”是在定義函數(shù)名和函數(shù)體的時候使用的參數(shù),目的是用來接收調(diào)用該函數(shù)時傳遞的參數(shù)。
形參的作用是實現(xiàn)主調(diào)函數(shù)與被調(diào)函數(shù)之間的聯(lián)系,通常將函數(shù)所處理的數(shù)據(jù),影響函數(shù)功能的因素或者函數(shù)處理的結(jié)果作為形參。
實參:全稱為"實際參數(shù)"是在調(diào)用時傳遞給函數(shù)的參數(shù),即傳遞給被調(diào)用函數(shù)的值。
實參可以是常量、變量、表達(dá)式、函數(shù)等, 無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應(yīng)預(yù)先用賦值,輸入等辦法使實參獲得確定值。
擴展資料:
形參和實參的特點:
1、形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。因此,形參只在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)用函數(shù)后則不能再使用該形參變量。
2、實參可以是常量、變量、表達(dá)式、函數(shù)等,無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入等辦法使參數(shù)獲得確定值。
3、實參和形參在數(shù)量上,類型上、順序上應(yīng)嚴(yán)格一致,否則就會發(fā)生類型不匹配的錯誤。
4、在一般傳值調(diào)用的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數(shù)調(diào)用過程中,形參值發(fā)生改變,而實參中的值不會變化。而在引用調(diào)用的機制當(dāng)中是將實參引用的地址傳遞給了形參,所以任何發(fā)生在形參上的改變實際上也發(fā)生在實參變量上。
參考資料來源:百度百科-形參
參考資料來源:百度百科-實參
文章標(biāo)題:C語言函數(shù)體作為形參,c語言函數(shù)的形參和實參
網(wǎng)頁URL:http://chinadenli.net/article10/dsgjjgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站制作、域名注冊、品牌網(wǎng)站制作、標(biāo)簽優(yōu)化、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)