c語言返回兩個值
樓下真牛逼,恐怕是怪獸大學畢業的吧。
推薦做法
把函數聲明寫成這樣int func(int* ret1,int* ret2)
這樣就可以用ret1和ret2來返回信息了,事實上,scanf函數就是這樣的一個例子。
方案二呢,可以將多個返回值打成一個結構體,然後作處理,其實這種方式不怎麼好,因為結構里的兩個變數很可能沒什麼聯系,而你卻把他們打包在一起。其實,等你學得好了,你會發現其實還有很多方法都可以達到目的,因為c語言就是如此強大而靈活。最後,警告一下不要用 return a,b之類的語句。因為a,b會被解釋為一個逗號表達式,它最終的值就是b的值,所以return a,b;就等同於return b;
⑵ c語言中在一個自定義函數中怎麼返回兩個值
方法一:設置全局變數,這樣在形參中改變全局變數,在實參中也會有效。所以可以在形參中改變多個全局變數的值,那麼在實參中就相當於返回多個值。
方法二:如果用數組名作為形參,那麼改變數組內容,比如排序,或者進行加減運算,回到實參時依然是有效的。這樣也會返回一組值。
方法三:可以利用指針變數,這個原理和方法二是一樣的,因為數組名本身就是數組首元素的地址。就不多說了。 用結構體封裝不同類型數據,或者用數組表示同類型數據,然後返回結構體指針或者數組名,本質都是用指針來返回多個參數
方法四:如果學過C++,可以引用參數
⑶ C語言的子函數怎麼返回兩個值
函數是不能直接返回兩個值的,不過可以通過數組,列表,鏈表等方式,返回多個值。
例如 int a[] f(),這個shu函數返回值就是一個整型的數組,如果你要返回兩個值,可以定義數組長度為2,a[0]保存第一個值,a[1]保存第二個值。
int fun(int a, int b, int *c, int *d);
參數是a,b,返回值是c,d,c和d用指針傳進去。
c,d可以是其他參數類型,也可以是數據結構。
函數返回值可以用於返回error。
(3)c語言返回兩個值擴展閱讀:
如果沒有返回值類型名為"void", 整數類型int 類型返回值為整數類型int,以此類推……
類型名有:void int long float int* long* float* ……
C++中函數的調用:函數必須聲明後才可以被調用。調用格式為:函數名(實參)
調用時函數名後的小括弧中的實參必須和聲明函數時的函數括弧中的形參個數相同。
有返回值的函數可以進行計算,也可以做為右值進行賦值。
⑷ c語言一個函數能否有兩個返回值
應該是正確的,因為系統可能把a,b作為一個逗號表達式,返回逗號表達式的值b,不行的話,return (a.b);試試
你的語句可能正確,但你想讓它返回a和b不可能,一個return 語句只返回一個值,執行完return,程序就結束
⑸ 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;
}
(5)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語言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 運行結果
⑺ C語言中return語句怎樣返回兩個或多個值
/*我把樓主的稍微改了一下,一個函數裡面只能有一個return語句,因為程序執行到這個return語句的時候就已經返回的,他後面的語句都不會執行。所以摟主你的max函數中雖然有兩個return,但是後面一個根本就不會執行。要想讓一個函數返回多個值,可以用傳地址來實現,下面是這個程序*/
#include
"stdio.h"
int
max(int
x,int
y,int*
z);//第三個參數傳的是地址用來保存最大值加100
void
main()
{
int
a,b;
int
maxLi
=
0;//保存最大值加100
int
maxNum=
0;//保存最大值
scanf("%d,%d",&a,&b);
maxNum=max(a,b,&maxLi);
/*函數的返回值本身就是最大值,所以可以用一個整形變數來存儲他,而由於第三個參數傳的是maxLi的地值,用來存放最大值加100,他與函數裡面的改變是同步的,所以可以保存而不丟失,這樣兩個數值都得到了*/
printf("Max
is
%d,%d",maxNum,maxLi);
}
int
max(int
x,int
y,int*
z)
{
int
tmp
=
0;
tmp=x>y?
x:y;
*z=tmp+100;
//將tmp+100存到z裡面地值(就是maxLi的地質)所表示的內存
return
tmp;
}
⑻ C語言 如果調用兩個函數 就是返回兩個值
如果使用 return 語句的話,那麼一次函數調用就只能返回一個值;如果想一次函數調用操作就能夠返回兩個值的話,那麼就只能夠通過傳遞指針變數實現。例如下程序:
void mysubcall(int *, char *) ;
void main( )
{
int num = 10 ;
char mystr[20]=「1234567890」;
mysubcall(&num,mystr);
printf(「%d %s\n」,num,mystr);
}
void mysubcall(int * num, char mystr[20])
{
(*num)+=40;
mystr[5]+=5;
}
該子函數返回的就是兩個值:改變後的數字、以及改變後的字元串。
⑼ C語言函數返回2個值
首先比喻下函數是什麼吧?
函數簡單的說就是一個黑箱子似的製造機器,你給他原料(輸入參數)它給你製造出產品(函數返回的結果)。
所以函數的返回值一般就是你想要的結果。當然有些函數沒有返回值,比如輸出一句話的函數,這函數就沒有返回值。c++用void型表示。但是求兩個數的最大值函數int
max(int
a,
int
b)的返回值就可以是你求的最大的值。
int
max(int
a,
intb)
{
if(a>b)
{
return
a;
}
else
{
return
b;
}
}
其中return返回的值就是函數的返回值。