需要從函數(shù)中返回多于1個變量值時,最常用、也較簡單的辦法是在主調(diào)函數(shù)中聲明變量,把變量的地址傳給被調(diào)函數(shù),在被調(diào)函數(shù)中通過指針直接操作主調(diào)函數(shù)中的變量。如此題中在主調(diào)函數(shù)中聲明x和y,把x和y的地址(指針)傳給被調(diào)函數(shù)。舉例如下:
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)彭水苗族土家族,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
void?f(int?*x,int?*y){
*x=10;
*y=34;
}
int?main(void){
int?x,y;
f(x,y);
printf("x?=?%d\ny?=?%d\n",x,y);
return?0;
}
大家都知道c語言主函數(shù)中交換兩個變量的值,可以通過以下代碼實現(xiàn):
#includestdio.h
int main()
{
int a=10,b=20,temp;//先定義一個temp
//以下實現(xiàn)兩個變量的交換(具體理解請參照圖一)
temp=a;
a=b;
b=temp;
printf("a=%d,b=%d",a,b);//此時a=20,b=10;
return 0;
}
但是如何通過調(diào)用函數(shù)實現(xiàn)交換兩個變量的值呢?
首先我們先寫一下主函數(shù)
#includestdio.h
//調(diào)用函數(shù)前應(yīng)先聲明一下被調(diào)用函數(shù),此處暫時省略,分析完畢形參后,會寫上正確格式
//主函數(shù)
int main()
{
int a=10,b=20;
swap( );//此處正確寫法應(yīng)加入實參,但是為了分析,此時暫未寫實參
printf("a=%d,b=%d",a,b);
return 0;
}
//以下為被調(diào)用函數(shù)中常見錯誤
//常見錯誤1:
void swap( int m,int n )//接收a和b的值
{
int temp=m;
m=n;
n=temp;
}
//此處錯誤在于,此處為值傳遞,被調(diào)函數(shù)swap中交換了m和n的值,并未交換主函數(shù)中a,b的值,所以a和b輸出結(jié)果仍然為a=10,b=20;具體參考下圖
//常見錯誤2:
void swap( int *m,int* n )//接收a和b的地址
{
int *temp=m;//定義一個指針temp,把指針m中的地址賦給指針temp
m=n;
n=temp;
}
//此處錯誤在于,swap中實現(xiàn)了,兩個指針m和n指向的交換,但是并未對主函數(shù)中的a和b進行操作,所以輸出結(jié)果依然為a=10,b=20;具體參考下圖
c語言中用函數(shù)交換兩個變量的值方法是先將變量賦值給中間變量,然后中間變量再賦值給另外一個變量,程序如下:
#include "Stdio.h"
#include "Conio.h"
void swap(int x,int y)
{
int t,m;
t=x; ?//變量x賦值給中間變量t
m=y; ? ?//變量y賦值給中間變量m
x=m; ? ?//中間變量m賦值給變量x,將y的值賦值給了x。
y=t; ? ? ?//中間變量t賦值給變量y,將x的值賦值給了y。
}
main()
{
int a,b;
a=1,b=2;
swap(a,b); //調(diào)用交換函數(shù)
printf("%d,%d",a,b);
getch();
}
擴展資料:
C語言的語法結(jié)構(gòu):
1、順序結(jié)構(gòu)
順序結(jié)構(gòu)的程序設(shè)計是最簡單的,只要按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行,它的執(zhí)行順序是自上而下,依次執(zhí)行。
例如:a = 3,b = 5,現(xiàn)交換a,b的值,這個問題就好像交換兩個杯子里面的水,這當然要用到第三個杯子,假如第三個杯子是c,那么正確的程序為:c = a; a = b; b = c;執(zhí)行結(jié)果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執(zhí)行結(jié)果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。
順序結(jié)構(gòu)可以獨立使用構(gòu)成一個簡單的完整程序,常見的輸入、計算、輸出三步曲的程序就是順序結(jié)構(gòu)。
2、選擇結(jié)構(gòu)
對于要先做判斷再選擇的問題就要使用選擇結(jié)構(gòu)。選擇結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。選擇結(jié)構(gòu)的程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當?shù)倪x擇語句。
選擇結(jié)構(gòu)適合于帶有邏輯或關(guān)系比較等條件判斷的計算,設(shè)計這類程序時往往都要先繪制其程序流程圖,然后根據(jù)程序流程寫出源程序,這樣做把程序設(shè)計分析與語言分開,使得問題簡單化,易于理解。程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。
3、循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)可以減少源程序重復書寫的工作量,用來描述重復執(zhí)行某段算法的問題,這是程序設(shè)計中最能發(fā)揮計算機特長的程序結(jié)構(gòu),C語言中提供四種循環(huán),即goto循環(huán)、while循環(huán)、do while循環(huán)和for循環(huán)。
四種循環(huán)可以用來處理同一問題,一般情況下它們可以互相代替換,但一般不提倡用goto循環(huán),因為強制改變程序的順序經(jīng)常會給程序的運行帶來不可預料的錯誤。
參考資料來源:百度百科-C語言
問的問題不夠清楚。
可以在子函數(shù)中定義,并輸入.
例子;
int max(void)
{
int x,y;
printf("input two number:\n");
scanf("%d%d",x,y);
if(xy)
return x;
else
return y;
}
這個無法交換數(shù)據(jù)。
C語言函數(shù)參數(shù)的基本規(guī)則是值傳遞,所以傳遞時只能實現(xiàn)實參向形參的單向的、值的傳遞。這就是為什么需要使用指針才能實現(xiàn)值交換的原因。