實現Swap函式,將兩個數交換

2021-10-12 02:45:42 字數 1487 閱讀 9562

乙個人至少擁有乙個夢想,有乙個理由去堅強。心若沒有棲息的地方,到**都是在流浪——三毛

自信心深受打擊的我,只能來寫寫筆記了。

剛剛對指標做了基礎的學習,那麼指標的作用在**呢,我們就用swap函式作一下分析。

假如我們要交換a和b的值

void

swap

(int a,

int b)

//交換不成功

intmain()

我們來看

由此看出位址是不同的,在swap函式中a和b的值交換,並不會影響到main中的變數,在這裡僅僅是按值(複製)傳遞。

如果想在swap函式中修改main中的值,必須突破不同函式間的限制,那我們必須要引入指標,來看第二個。

void

swap

(int

*p1,

int*p2)

//交換不成功

intmain()

我們發現依然不成功,來看一下圖。

由圖可以看出,p1和p2的內容確實交換了,但是a,b的值並沒有交換,想要交換我們必須得解引用。

來看第三版本

void

swap

(int

*p1,

int*p2)

//程式崩潰

intmain()

上面的**在執行時,程式崩潰。在編譯時編譯器會提醒你使用了未初始化的區域性變數。這是因為我們使用了野指標。

野指標:也被叫做懸掛指標,是我們沒有訪問許可權的位址,這個位址有可能是不存在,也有可能是存在但我們不能訪問。那麼我們把野指標消除,來看第四種:

void

swap

(int

*p1,

int*p2)

intmain()

來看執行結果:

來看一下過程

結論:被呼叫函式的改變要想影響到呼叫函式,必須要1、傳指標2、解引用(訪問)。

終於寫完了。。。

使用函式實現兩個數的交換。

錯誤 如下 執行結束後a,b的值並沒有像我預想的那樣發生交換!include include void swap int x,int y intmain 改進如下 swap1是交換前的值 swap是交換後的值 include include void swap1 int x,int y 對指標解引用...

兩個數交換值得實現

include using namespace std void f int m,int n void fun int m,int n int main 第乙個交換函式是利用的指標的方式,用這種方式直接從位址層面講原本a的位址指向了b,b的位址指向了a,從而實現了兩個數的交換 第二種方式是利用引用的...

交換兩個數

問題 如果要求不使用臨時變數,應該如何交換兩個變數的值?解決這個題的方式有好幾種,第一種當然就是使用系統自帶的swap 函式了。不過,這種抖機靈的做法一般人很難欣賞,而且說不定它內部實現使用了臨時變數也說不定 這是使用臨時變數的做法,也是我們在c語言中常用的做法 func swap1 a inout...