當前位置:首頁 » 編程語言 » c語言怎麼返回參數方向
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎麼返回參數方向

發布時間: 2022-06-24 05:08:31

c語言如何返回值

首先說明一下你的程序的問題與缺陷:

1: return語句 只能返回一個值,而不能寫成 「return h,l;」

2:你在main()中定義了h,l,而在調用cal()時,又定義了h,l,這兩個h,l是完全不同的兩組。即使你為cal()里的h,l賦值,那麼返回到main()時,h,l仍然為0.

3:你在cal()里的scanf寫的不好。兩個%d之間最好什麼都沒有,加了逗號,可能會在讀取時,h,l賦值錯誤。(具體請看我下面的程序)



下面是我的解法:

先問一下,你用的是TC2.0還是VC6.0?

如果是VC6.0,那麼可以使用引用類型:

/*法一:使用引用*/
#include<stdio.h>
voidcal(int&ch,int&cl);/*聲明ch,cl為引用類型*/
voidmain()
{
inth=0,l=0;
cal(h,l);/*這里將h,l傳入cal()*/
printf("%d,%d",h,l);
}
voidcal(int&ch,int&cl)
{
scanf("%d%d",&ch,&cl);/*這里為ch,cl賦值*/
}

TC2.0中好像不支持引用類型。我沒測試。

-------------------------

如果是TC2.0,那麼可以使用指針:

/*法二:使用指針*/
#include<stdio.h>
voidcal(int*ph,int*pl);/*這里將ph,pl聲明為指針*/
voidmain()
{
inth=0,l=0;
cal(&h,&l);/*將變數h,l地址傳過去。*/
printf("%d,%d",h,l);
}
voidcal(int*ph,int*pl)
{
scanf("%d%d",ph,pl);/*為ph,pl賦值*/
}

------------------

以上兩種方法都可以解決你說的問題。


有問題請追問。

⑵ 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"
voidmax_min(int*ptr,intn)/*定義求數組最大值最小值的函數,傳遞數組指針*/
{inti,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()
{
intA[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d,min=%d ",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"
structinf{/*定義學生結構體,分別包含成員學號、姓名、班別、總評成績*/
charxh[12];
charname[20];
charclass[15];
intchj;
};
main(void)
{
structinfa1;/*定義學生結構體類型變數*/
voidxxxx(structinf*ptr);
printf("請輸入學號,姓名,班別,總評成績,以空格隔開: ");
xxxx(&a1);/*調用函數,以學生結構體類型變數地址作為實參*/
printf("學號:%s,姓名:%s,班別:%s,總評成績:%d",a1.xh,a1.name,a1.class,a1.chj);
getch();
}
voidxxxx(structinf*ptr)/*該函數實現對結構體成員數據的錄入操作*/
{
charxh1[12],name1[20],class1[15];
intchj1;
scanf("%s%s%s%d",xh1,name1,class1,&chj1);
strcpy(ptr->xh,xh1);
strcpy(ptr->name,name1);
strcpy(ptr->class,class1);
ptr->chj=chj1;
}

⑶ 求教 C語言 返回函數參數問題

這個圖是試圖給大家解釋那個迭代的計算過程的參數傳遞,第一個n=4,因為n!=0,所以執行n-1的那個分支。第二個n=3,第三個n=2。然後第四個n=1,最後是執行n=0,返回s=1那個分支。

⑷ c語言中,函數返回值怎麼用

return後接一個值。
在調用這個函數的函數裡面,調用它的時候希望獲得一個值,如果不希望獲得這個值的時候,用void聲明就好。如果需要,比如說需要得到一個整形值
就聲明
int func()
在調用它的比如main裡面
func()的作用就可以相當於一個int型常數
比如外面定義了
int max(int a,int b)
{
return a>b?a:b;
}
主函數裡面是
main()
{
int A;
A=max(1,2);
}
這時候就是通過max計算 1>2 則return 一個1 ,1<2 則return一個2。很明顯1<2 所以這里max(1,2)就會return 一個 2
這時候主函數里的max(1,2)就相當於一個常數 2
A=max(1,2)的作用就相當於A=2
這個意思。

⑸ C語言指針作函數參數時的返回問題

首先,弄懂函數參數都是靠值傳遞。指針也是。
進入函數後,函數創建幾個空間給形參,再把實參數值拷過來。退出函數時,把形參空間釋放,則影響不到實參。這就是值傳遞。
swap(int *p1,int *p2)函數首先創建兩個空間,是指針,再把實參復制過來,即p1=pointer_1=&a,p2=pointer_2=&b,改變p1,p2就分別指向了a,b.改變p1指向的值就是改變了a。然後交換*p1,*p2,ab就互換了。函數退出,釋放p1,p2所佔的內存空間。但是a,b值互換了。swap函數沒有改變實參pointer_1,pointer_2的內容,只是藉助指針實現了巧妙的乾坤大挪移。

學到c++後有個引用例外,那是後話了。

++++++++++++++++++++++華麗麗的分割線+++++++++++++++++++++

其實很簡單,不要硬記規律,要理解了。
第二個例子中swap(int x,int y)沒有改變原來實參a,b的值
第一個例子中swap(int *p1,int *p2)也沒有改變原來兩個實參pointer_1,pointer_2的值,他們值分別是是a,b地址,但pointer_1,2指向的內容改變了,改的是以pointer_1,pointer_2的值為地址的內存單元的值。

⑹ C語言和匯編混合編程時如何帶回一個以上的返回參數

本來C語言就只能返回一個值,不管你和什麼語言混合。可以用指針參數返回值,也可以定義一個結構,包裝好要返回的多個值,然後返回其指針,注意不要返回棧內存的地址就可以了

⑺ 關於c語言中返回值 有什麼作用 到底怎麼返回的

返回到函數調用處了。
比如你主函數中有如下調用
int a,b=1,c=2;
int *s=&b,*t =&c;
然後
a=fun(s,t);
這樣返回值就替代了這個函數,假設返回值是x,那麼剛剛那句話相當於a=x;
返回值會替代函數的調用,成為這個函數所調用的值。
不懂請追問。求採納~

⑻ C語言下程序如何通過改變地址指向將參數值返回主函數急求

你的for循環有問題a[i]!=''
這個判斷一般是判斷字元串結束符

for(i=0;a[i]!='';i++)
{
if(n==a[i])
{
flag=i+1;
*p=1;
a[i]=0;
}
}

=>

for(i=0;i<N;i++)
{
if(n==a[i])
{
flag=i+1;
*p=1;
a[i]=0;
break;
}
}

⑼ c語言怎麼返回值

所謂返回值,就是人們想要知道函數或者程序所得到 的結果而設計的函數或者程序結束時給出一個值。比如:我們編寫一個加法函數,肯定想知道加完過後的結果是什麼,那麼我們就指定這個結果為該加法程序的返回值。

關於返回值的返回:
1、函數調用語句本身代表其返回值:例如:fun(a);那麼「fun(a)」就是這個返回值。
2、可以把返回值存到對應類型的變數之中。例如:int a=fun(b);
3、返回值是多種多樣的,可以是各種各樣的,int short char double 等等,還可以是指針或者結構體。在數據結構的二叉樹部分,某一個函數的返回值是一個帶有兩個指針的結構體。