資源描述:
《如何實(shí)現(xiàn)一個(gè)子函數(shù)返回多個(gè)值》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、如何實(shí)現(xiàn)一個(gè)子程序返回多個(gè)返回值我們知道,在C語言中,子函數(shù)可以有零個(gè)或者一個(gè)返回值,那么當(dāng)我的子程序中產(chǎn)生了兩個(gè)及以上的數(shù)值需要傳遞給主函數(shù)或者其它的函數(shù),那么該怎么辦呢?首先第一種方法是采用全局變量,那么在子程序中改變?nèi)肿兞康闹?,再在其它函?shù)中使用。該方法的確可行,但全局變量使用過多會(huì)使程序顯得凌亂,除開發(fā)者木身外,不便于閱讀;其次采用全局變量時(shí)占用內(nèi)存會(huì)多,而且移植不方便。那么到底該如何實(shí)現(xiàn)一個(gè)子程序返回多個(gè)值,可以采用以下方法:第一種:釆用數(shù)組的形式,把需要返回的數(shù)值存放在數(shù)組中,然后在執(zhí)行程序中定義數(shù)組,傳遞指針。具體如下圖1.1#include/
2、*字程序傳入?yún)⑺抋,b返回a+b和a-b的值夬/voidFunctionReturnl(inta,intb,int*s){s[0二二a+b;s[l]=a-b;}intmain(){intx,y;intMaxMin[2];//定義一個(gè)數(shù)組,用于保存函數(shù)的返回值printf(f,Pleaseinputtwovalue'n");scanf("%d",&x):scanf&y);FunctionReturnl(x,y,MaxMin);printf(Mx=%df,,x);printf(ny=%dy);printf(,rMaxMin[0l=%dn,MaxMin[Oj);prin
3、tf(nMaxMin[l]=%dMaxMin[11);return0;圖1.1程序示例圖1.2程序執(zhí)行的結(jié)果演示執(zhí)行結(jié)果如下圖1.2第二種:釆用結(jié)構(gòu)體傳遞,即把主程序結(jié)構(gòu)體的首地址傳遞給調(diào)用程序結(jié)構(gòu)體的首地址。其程序如圖1.3所示。^include/*說明一個(gè)結(jié)構(gòu)類型★/typedefstructfunrerurn{intsum;intSubtract;}Fun_return;★孑程序傳入?yún)?shù)a,b返回a+b和a-b的值★Fun_returnFunctionReturn2(inta,intb){,Fun_returnValue;//定義一個(gè)結(jié)構(gòu)體Valu
4、e.sum=a+b;//給結(jié)構(gòu)體的兩個(gè)元素賦值returnValue;//返固結(jié)構(gòu)體的名稱,實(shí)際返回的是結(jié)構(gòu)體的首地址}intmainO{intx,y;Fun_returnValueReal;主程序中定義一個(gè)結(jié)構(gòu)printf(,fPleaseinputtwovalue,f);scanf&x);scanf(,f%dr,&y);ValueReal=FunctionReturn2(x,y);把主程序結(jié)構(gòu)的地址傳遞過來printf(,fx=%d,f,x);printf(';y=%d,f,y);”printf(,fValueRea1?sum=%dValueReal.su
5、m);printf(,fValueRea1?Subtract=%dP,ValueReal.Subtract);圖1?3程序示例程序的執(zhí)行結(jié)果如圖1.4所示。廠wC:UsersFangLeyunDe5ktop_函數(shù)…Pleaseinputtwovalue8025x=80y=25UalueReal.sum=105UalueReal.Subtract=55Pressanykeytocontinue圖1.4執(zhí)行結(jié)果第三種:通過臨時(shí)分配內(nèi)存來實(shí)現(xiàn)。即在子程序中開辟一個(gè)動(dòng)態(tài)存儲(chǔ)區(qū),用來保存變量,然后再主程序中調(diào)用,再釋放空間。需要注意的是調(diào)用malloc()函數(shù)必須包含頭文件t
6、tinclude,而JL使用完后,必須釋放所申請(qǐng)的動(dòng)態(tài)存儲(chǔ)空間,調(diào)用free(void*ptr)函數(shù)。其執(zhí)行的程序如圖1?5所示。^include^include"子程序傳入?yún)?shù)a,b返回a+b和a-b的值次/inr*FuncrionReturn(inra,intb){int*p;需強(qiáng)制轉(zhuǎn)換*//*左動(dòng)態(tài)內(nèi)存區(qū)中申請(qǐng)2個(gè)int型的存儲(chǔ)空間,由于malloc返回的是空指針,p=(int*)malloc(sizeof(int)*2);*p=a+b;*(p+l)=a-b;returnp;}inrmainO{intx,y;int
7、*ptr;//定義一個(gè)指針”printf(^Pleaseinputrwovaluer,);scanf&x);scanf&y);ptr=FuncrionRerurn(x,y);printf(nx=%dfx);printf(,fv=%dy);printf(n*ptr=%d*ptr);printf(”*(ptr+l)=%dM,*(ptr+1));free(ptr);7/釋放所申請(qǐng)的因吞空向return0;}圖1.5程序示例執(zhí)行結(jié)果如下圖1.6所示。?wC:UsersF