郝斌C ST 指標 swap問題

2022-06-12 01:27:11 字數 1696 閱讀 9315

在主函式種實現變數的交換

現在我們把這交換的行為封裝進方法中

swap函式確實進行了交換,列印也是10和5了,但是下面a和b的結果還是5和10

- 形參i 和 形參j 並不是和 a,b乙個變數,實參 a,b 傳遞值給形參 i,j

- 形參i 和 形參j ,還有temp變數,在記憶體也分配了空間,main函式跳轉至swap函式開始執行

- swap函式執行完畢,swap函式和內部的變數一併釋放銷毀,

- i,j已經銷毀,主函式的a,b 依然存在,最後一步列印的還是之前的a,b

- swap函式交換的是這個函式內部的變數,並沒有影響主函式的a,b!!!

使用指標形參i 和 j

傳值也必須對應的是變數的位址

對指標變數進行交換

- a  值5位址1001,b 值10位址1002

- 形參:指標變數 i值收到 &a 1001,指標變數j值收到 &b 1002 , 宣告指標變數temp,

- 三者交換完畢指標變數 i值1002,指標變數j值1001

- 但是a和b還是值5位址1001,值10位址1002

- 這個問題還是一樣,內部的指標變數確實交換了,但是方法結束之後有影響到主函式的a,b了嗎?並沒有!!!

- 指標變數 i 和 j 收到 a 和 b 的位址

- 把 指標i 的位址反引用獲取該值【位址值】儲存的值,賦值給 變數temp,這個型別是int 型別,不是int指標型別!!!

- 把 指標j 的位址反引用獲取該值【位址值】儲存的值 ,賦值給 反引用的 i【*i】

- 把 temp 變數的值,賦值給 反引用的 j【*j】

- 我們這樣就對主函式的a變數 和 b變數的值進行了交換

- a 變數的位址 給了指標 i ,i 可以通過*i 操作修改 a變數的值,

也就是說 *i 指向了變數a 的值,變數a可以操作這個值,*i也可以操作

- 單作操作符,用於相乘運算子

- 定義指標變數  int * p 定義了乙個int指標型別變數,識別符號是p,p只能存放int型別變數的位址,

- 指向運算子,*p指向了該位址儲存的值

#include void swap(int * i,int *j)

intmain()

《郝斌c語言 自學》 p127 - p129

郝斌C ST 指標入門

include int main 指標 指標變數型別 指標變數 同型別變數的位址賦值 說明 int i 3 宣告了乙個int型別的i變數,並賦值了3這個值 int p 宣告了乙個int指標型別 的 p指標變數,注意不是 p!int 表示這是乙個int指標型別 i 表示取這個i變數的位址,變數的位址也...

郝斌資料結構自學筆記 5 預備知識 指標

5 預備知識 指標 2 指標的重要性 指標是c語言的靈魂 定義 cpu 位址線,控制線,資料線 記憶體 指標 指標就是位址,位址就是指標。指標變數是存放記憶體單元位址的變數。指標的本質是乙個操作受限的非負整數。分類 1.基本型別的指標 2.指標和陣列的關係 變數並不一定連續分配,隨機分配記憶體。記憶...

郝斌資料結構1 預備知識 指標 跨函式使用記憶體

結構體 為什麼會出現結構體 為了表示一些複雜的資料,而普通的基本資料型別無法滿足要求 定義 結構體是使用者更加實際需要自己定義的復合資料型別 如何使用結構體 略 一維陣列 include include intmain void len為一維陣列的長度,可以根據需求動態分配長度 int len pr...