c語言一個函數能否有兩個返回值

用return只能返回一個!!(可以是一個變數,也可以是一個指針)
返回多個數值的話必須用指針來做。
int
*
add()
{
int
*a={1,2};
return
a;
}
或者你定義一個外部數組
在形參中引用

② C語言中return語句怎樣返回兩個或多個值

return語句不能直接返回多個值。如果想通過函數內部返回多個值的話,可是使用以下代碼

#include<stdio.h>

//定義一個s

typedefstruct_a

{

inta;

intb;

}A,*PA;

//函數返回結構體變數,它裡面就可以包含多個值

PAfunc()

{

PAa=(A*)malloc(sizeof(A));

a->a=2;

a->b=3;

returna;

}

intmain()

{

PAtest=func();

printf("%d%d ",test->a,test->b);

deletetest;

return0;

}

(2)c語言返回兩個值擴展閱讀

#include <stdio.h>

void min_max(int *ptr,int n)

{

int *temp;

for(int i = 0; i < 5; i++)

{

if(*(ptr) > *(ptr+i))

{

*temp = *(ptr);

*(ptr) = *(ptr+i);

*(ptr+i) = *temp;

}

if(*(ptr + n-1) < *(ptr + i) )

{

*temp = *(ptr+n-1);

*(ptr+n-1) = *(ptr+i);

*(ptr+i) = *temp;

}

}

}

int main()

{

int a[5];

for(int i = 0; i < 5 ; i++)

scanf("%d",&a[i]);

min_max(a,5);

printf("%d %d",a[0], a[4]);

return 0;

}

③ C語言的子函數怎麼返回兩個值

函數是不能直接返回兩個值的,不過可以通過數組,列表,鏈表等方式,返回多個值。例如 int a[] f(),這個函數返回值就是一個整型的數組,如果你要返回兩個值,可以定義數組長度為2,a[0]保存第一個值,a[1]保存第二個值。

④ C語言中一個函數怎樣返回多個值

方法一:設置全局變數,這樣你在形參中改變全局變數,在實參中也會有效。所以你可以在形參中改變多個全局變數的值,那麼在實參中就相當於返回多個值。
方法二:如果你用數組名作為形參,那麼你改變數組內容,比如排序,或者進行加減運算,回到實參時依然是有效的。這樣也會返回一組值。
方法三:可以利用指針變數,這個原理和方法二是一樣的,因為數組名本身就是數組首元素的地址。就不多說了。
方法四:如果你學過C++,可以引用參數

⑤ 編程中C語言函數想返回2個值該怎麼辦

樓下真牛逼,恐怕是怪獸大學畢業的吧。
推薦做法
把函數聲明寫成這樣int func(int* ret1,int* ret2)
這樣就可以用ret1和ret2來返回信息了,事實上,scanf函數就是這樣的一個例子。
方案二呢,可以將多個返回值打成一個結構體,然後作處理,其實這種方式不怎麼好,因為結構里的兩個變數很可能沒什麼聯系,而你卻把他們打包在一起。其實,等你學得好了,你會發現其實還有很多方法都可以達到目的,因為c語言就是如此強大而靈活。最後,警告一下不要用 return a,b之類的語句。因為a,b會被解釋為一個逗號表達式,它最終的值就是b的值,所以return a,b;就等同於return b;

⑥ c語言函數可不可以返回多個值

在C語言中,一般情況下函數的返回值是通過函數中的return語句來實現的,每調用一次return語句只能從函數中返回一個值。但在實際很多應用中,我們需要從函數中返回多個值,那我們可以用什麼方法實現呢?此時我們可以用三種方法來實現。
方法一:設置全局變數
全局變數是在函數外部定義的全局變數,它不屬於任何一個函數,其作用域是從變數的定義處開始,到本程序文件的結尾。在此作用域內,全局變數可為各個函數所引用。當我們需要函數返回多個值時,除了函數體中的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\n」,area);
printf(「周長為:%5.2lf\n」,l);//周長即為全局變數l在f函數中改變後的值
}

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

方法二:使用數組名或指針作為函數的形參
數組名或者指針實際為地址,而數組一般都包括多個元素,指針也可以指向一組數據的著地址,把數組名或者指針作為函數形參,實際上相當於主調函數的實參與形參共用地址,所以在函數中的數組元素發生改變即是實參也隨之改變。也相當於在調用函數時多個值返回給主調函數。

實例2:編寫函數求一維整形數組的最大值與最小值,並把最大值與最小值返回給主調函數。
方法:以指針方式傳遞該一維數組的地址,然後把數組的最大值與數組的第一個元素交換,把數組的最小值與最後一個元素交換。函數被調用完畢後,實參數組中的第一元素為數組的最大值,實參數組中最後一個元素為數組的最小值,從而實現返回數組的最大值與最小值的功能。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定義求數組最大值最小值的函數,傳遞數組指針*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int *temp;/*用於交換位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr<*(ptr+i))/*最大值與第一個元素進行交換*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp ;
}
if(*(ptr+n-1)>*(ptr+i))/*最小值與最後一個元素進行交換*/
{
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp ;}
}
}
/*調用最大最小值函數*/
main()
{
int A[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
getch();
}
調試結果如下:
請輸入6個整形數,以空格隔開:
5 8 9 32 -6 4
max=32,min=-6

注意:該方法適用於多個返回值的數據類型一致的情況。當返回值數據類型不一致時,不適用該方法。

方法三:使用結構體指針作為函數的形參

編寫返回多個值的C語言函數,可以考慮採用結構體的方式去實現。如果返回的數個數值的數據類型不一致,可以通過定義全局變數實現有多個返回值的C語言函數,也可以考慮把要求返回的數個值定義成一個結構體,然後同樣以傳遞結構體指針方式把結構體的指針傳遞給形參結構體指針,那麼函數中對形參結構體的修改即是對實參結構體的修改,函數被調用後獲取的實參結構體成員即為函數的多個返回值,下面以實例演示該方法的應用。
實例3:編寫一個用戶自定義函數,允許用戶錄入學生的基本信息(包括學號、姓名、所屬班級、總評成績),並返回這些基本信息給主調函數。
方法:把學生基本信息定義成一個結構體,在用戶自定義函數中傳遞該結構體的指針,則自定義函數中對結構體成員的錄入操作即是對實參結構體成員的錄入操作,從而實現多個返回值。參考代碼如下:
#include "stdio.h"
#include "conio.h"
struct inf{/*定義學生結構體,分別包含成員學號、姓名、班別、總評成績*/
char xh[12];
char name[20];
char class[15];
int chj;
};
main(void)
{
struct inf a1; /*定義學生結構體類型變數*/
void xxxx(struct inf *ptr);
printf("請輸入學號,姓名,班別,總評成績,以空格隔開:\n") ;
xxxx(&a1);/*調用函數,以學生結構體類型變數地址作為實參*/
printf("學號:%s,姓名: %s,班別:%s,總評成績:%d",a1.xh, a1.name,a1.class,a1.chj);
getch();
}
void xxxx(struct inf *ptr)/*該函數實現對結構體成員數據的錄入操作*/
{
char xh1[12],name1[20],class1[15];
int chj1;
scanf("%s%s%s%d",xh1,name1,class1,&chj1);
strcpy(ptr->xh,xh1);
strcpy(ptr->name,name1);
strcpy(ptr->class,class1);
ptr->chj=chj1;
}
調試結果如下:
請輸入學號,姓名,班別,總評成績,以空格隔開:
200102LiLi200185
學號:200102,姓名: LiLi,班別:2001,總評成績:85
注意:當函數要求返回的多個值是相互聯系的或者返回的多個值數據類型不一致時可以採用該方法。

結束語

對於以上這三種方法,如果想要返回的數個值數據類型一致,可以考慮採用方法2;而對於不同數據類型的返回值,如果各個數值之間是相互聯系的,則方法3較為合適;方法1雖然在很多情況下都可以實現多個返回值的C語言函數,但畢竟全局變數應用過程中有很多危險,要慎重使用。
通過對以上幾種方法的分析講解,在教學過程中,學生再遇到這樣的問題時,就能根據返回值的情況選擇合適的途徑去實現多個返回值的C語言函數。另外,如果再遇到類似的無法用教材知識點去直接解決的問題時,他們基本都能舉一反三地嘗試採用間接方式去解決。

參考材料:http://blog.csdn.net/supreme42/article/details/7636475
http://wenku..com/link?url=

⑦ c語言中調用函數如何返回多個值

1、通過使用指針,在函數調用時,傳遞帶有地址的參數,並使用指針更改其值;版這樣,修改後的值權就會變成原始參數。

⑧ c語言中在一個自定義函數中怎麼返回兩個值

方法一:設置全局變數,這樣在形參中改變全局變數,在實參中也會有效。所以可以在形參中改變多個全局變數的值,那麼在實參中就相當於返回多個值。
方法二:如果用數組名作為形參,那麼改變數組內容,比如排序,或者進行加減運算,回到實參時依然是有效的。這樣也會返回一組值。
方法三:可以利用指針變數,這個原理和方法二是一樣的,因為數組名本身就是數組首元素的地址。就不多說了。 用結構體封裝不同類型數據,或者用數組表示同類型數據,然後返回結構體指針或者數組名,本質都是用指針來返回多個參數
方法四:如果學過C++,可以引用參數

⑨ c語言return能不能有2個以上返回值

1 return只能返回一個變數,但該變數里是可以包含多個值的,即能滿足"有2個以上返回值"的要求

2 方法

採用數組或結構體等復合數據類型來作為函數的返回值類型

3 示例

#include<stdio.h>
#include<malloc.h>

//方法1:返回一個包含兩個值的數組
int*fun1(){
int*result=(int*)malloc(2*sizeof(int));
result[0]=5;
result[1]=6;
returnresult;
}
//方法2:返回一個包含兩個成員的結構體
structJiegouti{
inta;
intb;
};
structJiegoutifun2(){
return{5,6};
}

intmain(){
int*res1=fun1();
structJiegoutires2=fun2();
printf("%d%d ",res1[0],res1[1]);
printf("%d%d ",res2.a,res2.b);

free(res1);
getchar();
return0;
}

4 運行結果