- 相關(guān)推薦
如何實(shí)現(xiàn)C語言多個(gè)函數(shù)值的返回
導(dǎo)語:C語言中一般情況下函數(shù)值的返回都是通過return語句來實(shí)現(xiàn)的,但是return語句每次調(diào)用只能返回一個(gè)函數(shù)值,當(dāng)要返回多個(gè)函數(shù)值時(shí)就必須用其它途徑來間接的進(jìn)行處理。 下面就由小編為大家介紹一下如何實(shí)現(xiàn)C語言多個(gè)函數(shù)值的返回,歡迎大家閱讀!
方法一:設(shè)置全局變量
全局變量是在函數(shù)外部定義的全局變量,它不屬于任何一個(gè)函數(shù),其作用域是從變量的定義處開始,到本程序文件的結(jié)尾。在此作用域內(nèi),全局變量可為各個(gè)函數(shù)所引用。當(dāng)我們需要函數(shù)返回多個(gè)值時(shí),除了函數(shù)體中的return語句返回其中一個(gè)之外,其它的返回值我們可以通過定義全局變量來處理。因?yàn)楦鶕?jù)全局變量的特點(diǎn),在被調(diào)用函數(shù)中改變了多個(gè)全局變量和值,相當(dāng)于其主調(diào)函數(shù)全局變量的值也發(fā)生了變化,也就相當(dāng)于返回了多個(gè)值。
例如:利用一個(gè)函數(shù)求出正方形的周長和面積。
#include
double l=0;//定義全局變量l為正方形周長
void f(double a)//定義求面積和周長的函數(shù)
{
double s;
s=a*a;//求面積
l=6*a;//求周長,并賦給全局變量l
return s;//僅返回面積的值
}
void main()
{
double a,area;
printf(“請(qǐng)輸入邊長:");
scanf("%f",&a);
area=f(a);//面積的值通過調(diào)用f函數(shù)返回值
printf(“面積為:%5.2lf ”,area);
printf(“周長為:%5.2lf ”,l);//周長即為全局變量l在f函數(shù)中改變后的值
}
上面的例子即用全局變量實(shí)現(xiàn)了函數(shù)中返回多值的情況,這種方式易懂。但是全局變量用多了會(huì)破壞代碼的安全性,結(jié)構(gòu)性,這主要是全局變量在所有函數(shù)中都可以使用,從而其值的變化不確定,所以我們要慎用。
方法二:使用數(shù)組名或指針作為函數(shù)的形參
數(shù)組名或者指針實(shí)際為地址,而數(shù)組一般都包括多個(gè)元素,指針也可以指向一組數(shù)據(jù)的著地址,把數(shù)組名或者指針作為函數(shù)形參,實(shí)際上相當(dāng)于主調(diào)函數(shù)的實(shí)參與形參共用地址,所以在函數(shù)中的數(shù)組元素發(fā)生改變即是實(shí)參也隨之改變。也相當(dāng)于在調(diào)用函數(shù)時(shí)多個(gè)值返回給主調(diào)函數(shù)。
例如:
#include
void a(int array[]);
int main()
{
int array[5]={1,2,3,4,5},i;
a(array);
for(i=0;i<5;i++)
printf(“%d”,array[i]);
}
void a(int array1[])
{
int i;
for(i=0;i<5;i++)
array1[i]++;
}
在此程序中,當(dāng)在主函數(shù)中調(diào)用a函數(shù)時(shí),函數(shù)a中的形參數(shù)組array1與主函數(shù)中的實(shí)參數(shù)組array實(shí)際上共用地址,當(dāng)函數(shù)a中的形參數(shù)組array1中的元素改變時(shí),也就是實(shí)參數(shù)組array中的元素也發(fā)生了改變,從效果上看相當(dāng)于形參把改變后的值傳遞給實(shí)參,而且是改變了多個(gè)值。但是這種數(shù)組名作為參數(shù)時(shí),要求數(shù)組元素的類型相同,也就是說用這種方法返回多個(gè)值時(shí),要求這多個(gè)值的類型必須一樣,所以此方法僅適用于返回相同類型的多個(gè)值。
方法三:用結(jié)構(gòu)體作為函數(shù)的形參
在上述方法二中用數(shù)組返回函數(shù)多個(gè)值的情況,根據(jù)數(shù)組的特點(diǎn)要求返回的多個(gè)值必須是類型相同的數(shù)據(jù),但是在實(shí)際應(yīng)用過程中,有時(shí)返回值的類型不一定相同,那么我們有不有新的方法來處理這種情況?實(shí)際上在C語言中包含多個(gè)元素的構(gòu)造類型除了數(shù)組之外,還有結(jié)構(gòu)體和共用體。其中數(shù)組的元素類型必須相同,但是結(jié)構(gòu)體和共用體的元素類型可以不相同。而結(jié)構(gòu)體和共用體又有區(qū)別,在任何同一時(shí)刻,共用體只存放了一個(gè)被選中的成員,而結(jié)構(gòu)體的所有成員都存在。因此,當(dāng)函數(shù)需要返回多個(gè)不同類型的值時(shí),用結(jié)構(gòu)體來實(shí)現(xiàn)是比較函數(shù)的多值返回比較合理。例如:
#include
#include
#include
typedef struct student
{
char name[10];
int age;
}Student;
Student*fun1()
{
Student*ps=new Student;
strcpy(ps->name,"zhong");
ps->age=0x100;
return ps;
}
void main()
{
*ps=fun1();
printf(“name:%s age:%d”,ps->name,ps->age);
}
上例中fun1函數(shù)返回了name和age兩個(gè)不同類型的值,分別是字符數(shù)組和整型,這兩個(gè)不同的值是被封裝在結(jié)構(gòu)體Student中,這樣就通過結(jié)構(gòu)體的方式同時(shí)返回多個(gè)函數(shù)值。
以上三種方法都可以解決C語言中返回函數(shù)多個(gè)值的問題,但是這三種方法的側(cè)重點(diǎn)是有區(qū)別的,所以在選擇多值返回的方法時(shí)要根據(jù)實(shí)際問題進(jìn)行合理的分析和選擇。
【如何實(shí)現(xiàn)C語言多個(gè)函數(shù)值的返回】相關(guān)文章:
C語言返回多個(gè)值的方法07-07
C語言中返回字符串函數(shù)的實(shí)現(xiàn)方法09-19
C語言實(shí)現(xiàn)返回字符串函數(shù)的方法有哪些07-10
C語言程序的實(shí)現(xiàn)09-27
C語言函數(shù)返回值解析09-17
C語言的HashTable簡(jiǎn)單實(shí)現(xiàn)10-12
深入解析C語言中的數(shù)值與真假08-14