C語言寫函式交換兩個數的值,為什麼一定要用指標

2021-06-25 15:02:44 字數 3699 閱讀 3972

1樓:娛樂小八卦啊

運用**解釋指標運用的理解如下:

#include

using namespace std;

int fun1 (int a,int b)

int c;

c=a;a=b;b=c;

cout<<"a1:"

int *c;

c=a;a=b;b=c;

cout<<"a2:"<<*a<<";b2:"<<*b

int *c;

c=*a;*a=*b;*b=c;

cout<<"a3:"<<*a<<";b3:"<<*b

int c;

c=*a;*a=*b;*b=c;

cout<<"a4:"<<*a<<";b4:"<<*b

int c;

c=a;a=b;b=c;

cout<<"a5:"

int aa=1,bb=2;

fun1(aa,bb);

cout<<"aa1:"

cout<<"aa2:"

cout<<"aa3:"

cout<<"aa4:"

fun5(aa,bb);

cout<<"aa5:"

輸出結果為:

a1:2;b1:1

aa1:1;bb1:2

a2:2;b2:1

aa2:1;bb2:2

aa3:1;bb3:2

a4:2;b4:1

aa4:2;bb4:1

a5:2;b5:1

aa5:2;bb5:1

main中呼叫fun1()時,將實參a,b的值傳遞給了交換函式,如果此時在swap1中列印,可以看到結果是正確的,但是該過程其實是將aa和bb分別複製了一份給了函式,執行完fun1()之後,aa和bb的值沒有任何變化。

fun2(),看似的確使用了指標,但還是失敗,因為這裡是將aa和bb的地址給交換了,而並沒有交換aa和bb的值。在這裡由於未給c賦值,c中並沒有確定的值,c中的值是不可預見的。此時c可能指向一個未知的儲存單元。

而嚴重的情況是,該單元的資料可能是有用的,因此fun2()不但沒有實現兩個數的交換,反而給系統的穩定性帶來威脅。

fun3(),將int賦值給int *,編譯錯誤。

fun4()是正確的。為了在函式中改變了的變數能被其它函式呼叫,正確的辦法是用指標變數作為函式引數,在函式執行過程中使指標變數所指向的變數值發生變化。

函式呼叫結束後,哲別變數值的變化依然保留下來,這樣就實現了通過函式呼叫是變數的值發生變化,在其它函式中可以使用這些改變了的值的目的。

fun5()也是正確的,這是引用的重要應用之一。對於引用的操作實際上是作用在引用所因的物件上。

擴充套件資料

在函式中的引數,並不是呼叫者的變數,而是臨時申請的變數a和b存放main函式中變數a和b的值,並在函式中用來計算,在fun中給a和b賦值都是在操作這兩個臨時申請的變數,函式返回後,這兩個變數被捨棄,函式呼叫也沒有將這兩個臨時變數的值返回給main函式中呼叫使用的引數功能。

所以,在函式中要操作呼叫者申請的變數,需要給出它們的指標,函式中用指標來找到這些變數的位置和內容。

2樓:匿名使用者

void swap(int *xx,int *yy)上面這種才可以。

你的兩個方法中,第一種方法,雖然引數是指標,但是作為引數的指標也還是臨時複製的,你在方法裡互換操作的是臨時指標而不是指標指向的內容

第二種方法,引數是兩個int變數,但作為引數這兩個變數只是臨時複製了一份,操作這兩個複製的臨時值並不能改變本體。

3樓:

c語言轉換變數的值,並不是直接轉換,而是通過反覆賦值進行值的覆蓋;有三種轉換方式,傳值,傳址,傳引用。如果不用指標,將b值符給a後,a,b的值是一樣的,a值的儲存地址不變,輸出時還是a值;而用指標後,通過指標指向地址,可進行地址層面的轉換,輸出電腦以為的a時,其實是b的地址上的b值才將兩個變數的值完全交換,此為傳址轉換。

4樓:

因為給函式引數分配的空間是臨時的 用完就被**了。

c語言中如何交換兩個指標變數的的值

5樓:小小歐平兒

1、首先,就是最基本的知識,寫標頭檔案、函式宣告、定義變數。

2、下面還需要定義指標,需要定義兩個指標p1和p2,然後把a的地址賦值給p1,把b的地址賦值給p2。

3、然後就是呼叫函式,該函式沒有返回值,就直接呼叫,但是引數進入的是a和b的地址,而不是a和b。

4、函式點用完之後,就是輸出a和b的值看一看是否互換了。

5、首先,a和b的地址傳給x和y,通過指標直接對a和b的值進行操作。

6、最後,就是調換*x和*y的值,這樣就是實現了a和b的值。

6樓:匿名使用者

交換兩個指標變數的的值有兩種不同的形式:

在指標定義所在函式交換兩個指標變數的值

這種交換,與交換兩個整型變數的值方法相同,分三步:

先將pa儲存到臨時變數pt中,

再將pb儲存到pa中,

最後將pt儲存到pb中

通過自定義函式進行交換兩個指標變數的值

這種交換,必須要傳遞兩個指標變數的地址到自定義函式中(即函式的形參是二維指標),然後在函式中對收到的二維指標變數中的內容進行交換,即可實現實參的交換。

7樓:匿名使用者

定義一箇中間變數t(也是結構體型別的):

t=p1;

p1=p2;

p2=t;就行了

8樓:匿名使用者

定義一個指標變數temp,*temp=*p1;*p1=*p2;*p2=*temp;

9樓:匿名使用者

#include

struct student

;void main()

10樓:

int a, b;

int *p1=&a,*p2=&b,*temp;

temp=p1; p1=p2;p2=temp;

這樣就完成交換

11樓:

4 int main(void)

5 add;

11 12 int *p;

13 int *q;

14 15 add.data = 1;

16 add.id =2;

17 p = &add.data;

18 q = &add.id;

19 printf("before turn p = %d q = %d\n",*p,*q);

20 p = &add.id;

21 q = &add.data;

22 printf("after turn p = %d q = %d\n",*p,*q);

23 24 return 0;

25 }

C語言程式設計題 編寫函式,用於求兩個數中的較小數用主函式

int min int a,int b return a 如下 include int comp int a,int b int main void 用c語言編寫 編寫一個函式,要求在主函式中輸入兩個數,輸出其中最大值。比較兩個數的大小可以使用三目運算子 三目運算子 表示式1 表示式2 表示式3 其...

求一道簡單的c例題定義兩個陣列利用函式給兩陣列賦值最後交換倆函式的值

include stdio.h 標頭檔案 void swap int p,int k 自定義函式交換兩個數的位置 void main include stdafx.h include stdio.h void fun int x 4 int y 4 void main for i 0 i 4 i v...

用c語言寫輸入兩個整數ab程式設計求解a的b次冪的

include include include include include include include using namespace std string highit string a,string b c for int i n m 1 i 0 i result.insert 0,1,...