c語言函數(shù)只能最多有一個(gè)返回值。我們以一個(gè)數(shù)據(jù)運(yùn)算函數(shù)作為實(shí)例講解:
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了港口免費(fèi)建站歡迎大家使用!
使用指針返回額外數(shù)據(jù):定義指針參數(shù),將結(jié)果通過指針返回。
如果有很多類型相同的數(shù)據(jù),如何返回?cái)?shù)組呢?c語言也只能借助指針返回?cái)?shù)組。
使用結(jié)構(gòu)體返回:如果返回多個(gè)數(shù)據(jù),并且各個(gè)數(shù)據(jù)類型都不相同。那么只能通過結(jié)構(gòu)體返回。
使用結(jié)構(gòu)體指針返回:直接返回結(jié)構(gòu)體,程序執(zhí)行效率會(huì)受到影響。因?yàn)樾枰獜?fù)制結(jié)構(gòu)體數(shù)據(jù),如果結(jié)構(gòu)體數(shù)據(jù)比較大,復(fù)制操作會(huì)損耗程序性能。
通過使用結(jié)構(gòu)體指針,我們也可以返回多個(gè)數(shù)據(jù)結(jié)果。
在c++中,除了使用指針,通常使用引用返回多個(gè)數(shù)據(jù)。與指針相比,使用引用時(shí)不用擔(dān)心函數(shù)調(diào)用者傳入不符合預(yù)期的指針。
首先說明一下你的程序的問題與缺陷:
1: return語句 只能返回一個(gè)值,而不能寫成 “return h,l;”
2:你在main()中定義了h,l,而在調(diào)用cal()時(shí),又定義了h,l,這兩個(gè)h,l是完全不同的兩組。即使你為cal()里的h,l賦值,那么返回到main()時(shí),h,l仍然為0.
3:你在cal()里的scanf寫的不好。兩個(gè)%d之間最好什么都沒有,加了逗號(hào),可能會(huì)在讀取時(shí),h,l賦值錯(cuò)誤。(具體請(qǐng)看我下面的程序)
下面是我的解法:
先問一下,你用的是TC2.0還是VC6.0?
如果是VC6.0,那么可以使用引用類型:
/*法一:使用引用*/
#includestdio.h
void?cal(intch,?intcl);????/*聲明ch,cl為引用類型*/
void?main()
{
int?h=0,l=0;
cal(h,?l);????????????/*這里將h,l傳入cal()*/
printf("%d,%d",h,l);????
}
void?cal(int?ch,?int?cl)
{
scanf("%d%d",ch,cl);/*這里為ch,cl賦值*/
}
TC2.0中好像不支持引用類型。我沒測(cè)試。
-------------------------
如果是TC2.0,那么可以使用指針:
/*法二:使用指針*/
#includestdio.h
void?cal(int?*ph,?int?*pl);????/*這里將ph,pl聲明為指針*/
void?main()
{
int?h=0,l=0;
cal(h,?l);????????/*將變量h,l地址傳過去。*/
printf("%d,%d",h,l);
}
void?cal(int?*ph,?int?*pl)
{
scanf("%d%d",ph,pl);????/*為ph,pl賦值*/
}
------------------
以上兩種方法都可以解決你說的問題。
有問題請(qǐng)追問。
return后接一個(gè)值。
在調(diào)用這個(gè)函數(shù)的函數(shù)里面,調(diào)用它的時(shí)候希望獲得一個(gè)值,如果不希望獲得這個(gè)值的時(shí)候,用void聲明就好。如果需要,比如說需要得到一個(gè)整形值
就聲明
int func()
在調(diào)用它的比如main里面
func()的作用就可以相當(dāng)于一個(gè)int型常數(shù)
比如外面定義了
int max(int a,int b)
{
return ab?a:b;
}
主函數(shù)里面是
main()
{
int A;
A=max(1,2);
}
這時(shí)候就是通過max計(jì)算 12 則return 一個(gè)1 ,12 則return一個(gè)2。很明顯12 所以這里max(1,2)就會(huì)return 一個(gè) 2
這時(shí)候主函數(shù)里的max(1,2)就相當(dāng)于一個(gè)常數(shù) 2
A=max(1,2)的作用就相當(dāng)于A=2
這個(gè)意思。
所謂返回值,就是人們想要知道函數(shù)或者程序所得到 的結(jié)果而設(shè)計(jì)的函數(shù)或者程序結(jié)束時(shí)給出一個(gè)值。比如:我們編寫一個(gè)加法函數(shù),肯定想知道加完過后的結(jié)果是什么,那么我們就指定這個(gè)結(jié)果為該加法程序的返回值。
關(guān)于返回值的返回:
1、函數(shù)調(diào)用語句本身代表其返回值:例如:fun(a);那么“fun(a)”就是這個(gè)返回值。
2、可以把返回值存到對(duì)應(yīng)類型的變量之中。例如:int a=fun(b);
3、返回值是多種多樣的,可以是各種各樣的,int short char double 等等,還可以是指針或者結(jié)構(gòu)體。在數(shù)據(jù)結(jié)構(gòu)的二叉樹部分,某一個(gè)函數(shù)的返回值是一個(gè)帶有兩個(gè)指針的結(jié)構(gòu)體。
①為什么需要return?
為了回答這個(gè)問題,
我打算用 模塊思維 來解釋。
②定義模塊(形參模塊)
定義函數(shù):f(s)(a,b)
滿足公式:s=a+b
函數(shù)名:f(s)
形參: a,b(公式中的 變量 )
函數(shù)返回值:return s
③調(diào)用模塊(實(shí)參模塊)
主函數(shù):main()表示用戶自己編寫的部分
調(diào)用函數(shù):f(s)(1,2)
滿足公式:x=f(s)(1,2)
函數(shù)名:f(s)和定義函數(shù)一致,產(chǎn)生調(diào)用
實(shí)參 :1,2( 賦值 給公式的值)
求值:printf("%d\n",x),求x的值?
④值的傳遞過程
調(diào)用模塊 中調(diào)用函數(shù)x=f(s)(1,2)
將實(shí)參1和2的值賦值給
定義模塊 中的形參a和b
(實(shí)參到形參是單向傳遞,不可逆)
定義模塊計(jì)算出s=a+b=1+2=3
定義模塊 中的return s
將s的值賦值給
調(diào)用模塊 中的函數(shù)f(s)(1,2)
即x=f(s)(1,2)=s=3
~
return s的作用
就是將定義模塊中的s
賦值 給調(diào)用模塊中的調(diào)用函數(shù)
如果沒有return s
調(diào)用模塊中的調(diào)用函數(shù)將永遠(yuǎn)沒有定值
即所求x 無定值
這一點(diǎn)和數(shù)學(xué)不一樣,
數(shù)學(xué)中
同一函數(shù)名的值是 通用 的,
C語言中
定義函數(shù)和調(diào)用函數(shù)的值是 隔離 的,
盡管函數(shù)名一樣
如果不賦值,調(diào)用函數(shù)永遠(yuǎn)無定值。
網(wǎng)站題目:c語言怎么使函數(shù)返回值 c語言有返回值的函數(shù)
文章出自:http://jinyejixie.com/article18/doddddp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站維護(hù)、小程序開發(fā)、軟件開發(fā)、網(wǎng)頁設(shè)計(jì)公司、App開發(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í)需注明來源: 創(chuàng)新互聯(lián)