兩個數字的交換(指標的使用)

2021-08-30 02:16:38 字數 1324 閱讀 7308

最近剛剛學了號稱c語言最難的指標, 初學之際如果未加以正確的解釋和引導確實很難理解,其實所謂指標就是乙個位址變數,在計算機中,在進行絕大多數操作是都應該先呼叫位址將所需要的值存放進去以供使用,而所謂指標,其實就是乙個位址變數,它的意義是所指向的位址,只不過要注意,在定義指標變數時,要在前面附加資料型別,雖然其本質是乙個位址變數,但還是指向位址中所存放的資料,根據這個原理,接下來我們做乙個小測驗**一下指標究竟是如何使用的。

#includeint swap(int a,int b)

int main()

如上圖**,這是一條個簡單的交換兩個數的程式,但是執行過後,結果卻是這樣

第三行的是在函式內部實現的交換,我們也看到確實完成了交換,但是在主函式中重新輸出兩個數,發現其值並沒有發生改變,也就是說交換其實根本未完成。在子函式中,我們完成了兩個數的交換,但實際上剛剛輸入的a、b兩個數並沒有進行交換,執行到這裡,就不得不提到自定義函式的性質,眾所周知,函式有形參與實參兩種引數,實參將值傳遞給形參然後供函式使用,一切的動作都也只會在函式內部進行,而在函式,作為把值傳遞給形參的實參並不會受到任何影響,所以若想修改形參的值,就要用到接下來提到的指標。

我們將程式作如下修改,引入指標:

值得注意的是,這裡有兩個容易犯的錯誤會導致程式崩潰

int swap_error1(int *m,int *n)

int swap_error2(int *m,int *n)

上面兩種錯誤是在一開始使用指標時因為概念模糊導致的錯誤,在這裡列出來起到警醒作用,在使用指標時一定要時刻明確自己此時此刻是需要傳遞位址還是位址所指向的值,只有明確了這些·,才能做到正確的使用指標。

以下是正確的指標使用方法:

int swap2(int *m,int *n)

int main()

此時,交換函式的兩個形參已經變成了兩個指標,前面提到指標就是位址,所以在呼叫該函式時,我們需要將兩個對應的位址變數傳進函式才不會引起編譯錯誤,在這裡我們將a,b的位址作為實參傳進函式,就沒有問題了。

我們也可以看到,交換兩個數的值這個功能已經實現。

在這裡,我們要說一下這個函式成功的根本原因,就在於指標直接指向了a,b的位址,接下來的解引用所交換的就是位址中存放的值,所以說從根本上改變了a,b的值,自然也就能完成交換的過程。

357,交換兩個數字的值

1,臨時變數實現 一般情況下交換兩個數字的值,我們都會使用乙個臨時變數,像下面這樣 private void swap int array,int i,int j 當然這段 非常簡單,哪怕是剛接觸過程式設計的同學也都能看的懂,我們今天要講的肯定不是上面這段 這麼簡單。那麼除了上面這種方法還有沒有其他...

兩個數的交換

一般思路 建立乙個臨時變數,以這個臨時變數為中間變數,利用賦值來完成兩個數的內容的相互交換。如下 include int main 優化方案 1.上述方法中需要另外建立乙個變數,略微有些麻煩,若是要求不能建立臨時變數,則可以採用數學上的加法來進行一些變通。如下 include int main 2....

C 系列 交換兩個數字

1.建立中間變數 這是最快也是最簡單的辦法,例如 include int main 2.呼叫函式交換兩個數的值 include void swap int p1,int p2 int main 3.用加減或乘除運算來交換 include int main 我這裡寫的是用加減法實現,很顯然成功了,乘除...