C語言

當前位置 /首頁/計算機/C語言/列表

如何實現C語言多個函式值的返回

導語:C語言中一般情況下函式值的返回都是通過return語句來實現的,但是return語句每次呼叫只能返回一個函式值,當要返回多個函式值時就必須用其它途徑來間接的進行處理。 下面就由小編為大家介紹一下如何實現C語言多個函式值的返回,歡迎大家閱讀!

如何實現C語言多個函式值的返回

  方法一:設定全域性變數

全域性變數是在函式外部定義的全域性變數,它不屬於任何一個函式,其作用域是從變數的定義處開始,到本程式檔案的結尾。在此作用域內,全域性變數可為各個函式所引用。當我們需要函式返回多個值時,除了函式體中的return語句返回其中一個之外,其它的返回值我們可以通過定義全域性變數來處理。因為根據全域性變數的特點,在被呼叫函式中改變了多個全域性變數和值,相當於其主調函式全域性變數的值也發生了變化,也就相當於返回了多個值。

例如:利用一個函式求出正方形的周長和麵積。

#include

double l=0;//定義全域性變數l為正方形周長

void f(double a)//定義求面積和周長的函式

{

double s;

s=a*a;//求面積

l=6*a;//求周長,並賦給全域性變數l

return s;//僅返回面積的值

}

void main()

{

double a,area;

printf(“請輸入邊長:");

scanf("%f",&a);

area=f(a);//面積的值通過呼叫f函式返回值

printf(“面積為:%5.2lf”,area);

printf(“周長為:%5.2lf”,l);//周長即為全域性變數l在f函式中改變後的值

}

上面的例子即用全域性變數實現了函式中返回多值的情況,這種方式易懂。但是全域性變數用多了會破壞程式碼的安全性,結構性,這主要是全域性變數在所有函式中都可以使用,從而其值的變化不確定,所以我們要慎用。

  方法二:使用陣列名或指標作為函式的形參

陣列名或者指標實際為地址,而陣列一般都包括多個元素,指標也可以指向一組資料的著地址,把陣列名或者指標作為函式形參,實際上相當於主調函式的實參與形參共用地址,所以在函式中的陣列元素髮生改變即是實參也隨之改變。也相當於在呼叫函式時多個值返回給主調函式。

例如:

#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]++;

}

在此程式中,當在主函式中呼叫a函式時,函式a中的形引數組array1與主函式中的實引數組array實際上共用地址,當函式a中的形引數組array1中的元素改變時,也就是實引數組array中的元素也發生了改變,從效果上看相當於形參把改變後的值傳遞給實參,而且是改變了多個值。但是這種陣列名作為引數時,要求陣列元素的型別相同,也就是說用這種方法返回多個值時,要求這多個值的型別必須一樣,所以此方法僅適用於返回相同型別的多個值。

  方法三:用結構體作為函式的形參

在上述方法二中用陣列返回函式多個值的`情況,根據陣列的特點要求返回的多個值必須是型別相同的資料,但是在實際應用過程中,有時返回值的型別不一定相同,那麼我們有不有新的方法來處理這種情況?實際上在C語言中包含多個元素的構造型別除了陣列之外,還有結構體和共用體。其中陣列的元素型別必須相同,但是結構體和共用體的元素型別可以不相同。而結構體和共用體又有區別,在任何同一時刻,共用體只存放了一個被選中的成員,而結構體的所有成員都存在。因此,當函式需要返回多個不同型別的值時,用結構體來實現是比較函式的多值返回比較合理。例如:

#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函式返回了name和age兩個不同型別的值,分別是字元陣列和整型,這兩個不同的值是被封裝在結構體Student中,這樣就通過結構體的方式同時返回多個函式值。

以上三種方法都可以解決C語言中返回函式多個值的問題,但是這三種方法的側重點是有區別的,所以在選擇多值返回的方法時要根據實際問題進行合理的分析和選擇。

TAG標籤:語言 函式 返回 #