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