亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言

如何實(shí)現(xiàn)C語言多個(gè)函數(shù)值的返回

時(shí)間:2024-09-16 06:46:58 C語言 我要投稿
  • 相關(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

如何實(shí)現(xiàn)C語言畫圖教程08-08

C語言如何實(shí)現(xiàn)畫圖教程08-19

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ù)的參數(shù)和返回值09-14

深入解析C語言中的數(shù)值與真假08-14