欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C語言函數(shù)體作為形參,c語言函數(shù)的形參和實參

C語言的形參可以在函數(shù)內(nèi)使用嗎?

可以在函數(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ù)傳送。

C語言中用函數(shù)做函數(shù)的形式參數(shù)的問題

※※※※※※※※※※※第一個問題的答復(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ù)※※※※※※※※※※※※※※※

c語言 函數(shù)做函數(shù)的形參

主函數(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ù)值將是你程序的文件名。

怎樣定義C語言函數(shù)中的參數(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é)果就是你對形參的操作不會被傳遞出來。

是否可以解決您的問題?

C語言中什么是形參,什么是實參?

形參:全稱為“形式參數(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)

網(wǎng)站建設(shè)網(wǎng)站維護公司