學習C語言,老師讓用swap交換兩個數的值,為啥要用指標,不用指標兩個數並沒有交換小白在這裡謝謝大佬?

時間 2021-09-09 11:23:43

1樓:xulvxiu

不請自來,看到老師盒飯的例子,心有所感,就用硬碟來舉個例子吧。

老師的電腦裡面有 c 盤 d 盤 x 盤 y 盤,另外在桌面上還有 2 個快捷方式,px 指向 x 盤, py 指向 y 盤。

intmain(){

intx=1

;inty=

2;int*px=

&x;int*py

=&y;

快捷方式能理解吧? 雙擊快捷方式就可以開啟 x 盤或 y 盤了。

老師讓你把 x 盤和 y 盤裡面的檔案交換(swap)一下。

不用指標的話:

在 c 盤新建三個目錄,分別命名為 x, y 和 tmp,然後把 x 盤的檔案複製乙份到 x 目錄;把 y 盤的檔案複製乙份到 y 目錄;

void

swap

(intx,

inty){

inttmp=0

;下面開始交換:

1) 把 c 盤 x 目錄中的檔案複製到 tmp 目錄中。

tmp = x;

2) 清空 c 盤 x 目錄,把 c 盤 y 目錄中的檔案複製到 c 盤 x 目錄中。

x = y;

3) 清空 c 盤 y 目錄,把 tmp 目錄中的檔案複製到 c 盤 y 目錄中。

y = tmp;

大功告成。

使用指標的話:

在 c 盤新建乙個目錄,命名為 tmp,把桌面上的快捷方式 px 和 py 複製乙份也放到 c 盤,仍然叫做 px 和 py。

void

swap

(int*px

,int*py

){inttmp=0

;下面開始交換:

1) 雙擊 c 盤中的快捷方式 px , 於是就開啟了 x 盤,然後把 x 盤中的檔案複製到 tmp 目錄中。

tmp = *px;

2) 雙擊 c 盤中的快捷方式 px , 於是就開啟了 x 盤,清空 x 盤中的全部檔案;

雙擊 c 盤中的快捷方式 py,於是就開啟了 y 盤,把 y 盤中的檔案複製到剛剛開啟的 x 盤中。

*px = *py;

3) 雙擊 c 盤中的快捷方式 py,於是就開啟了 y盤,清空 y 盤中的全部檔案,把 tmp 目錄中的檔案複製到 y 盤中。

*py = tmp;

大功告成。

2樓:

你需要理解乙個詞叫「作用域」。就是說預設情況下變數只在乙個函式裡面有效。你在main函式裡面定義的a和b,和swap函式裡面的a和b根本就不是同乙個變數。

你只是複製了乙個副本,你修改副本肯定不影響原來的值。

而指標是直接把main函式ab的位址暴露給swap,swap的ab指標可以定址到main函式裡面,從而到底修改的目的。

3樓:胡公升

因為正常的函式傳參是傳值,就是說進入函式的時間拷貝的是值副本,必須傳位址,修改位址指向的值才有用.或者可以用c++的引用傳值

學習c語言用什麼軟體?

WangKX visual studio 2019 community,跟上步伐學這個最新的。不懂看 c 新經典 裡面有詳細安裝步驟 除錯方法介紹。 cpp程式設計 這些都是比較常用的 1 visual c 6.0 win8系統下不好用,C C Mi crosoft Visual C 這個編譯器已經...

如何開始想學習c語言,用什麼軟體編碼?

小豬Zoey DevC 好像是叫這個這個比其他的小,快捷,但是功能沒有VS的那個全面,學C 語言是絕對夠用,假如你光先入手學C 語言聯絡你用這個,到後期再安裝別的大的功能全面的 裝乙個linux,用gcc編譯。編輯器就看個人愛好了,我用vscodium為什麼要用linux呢?為什麼要用gcc呢?理由...

如何看待學校讓學生用手機學習 C 語言?

雖然手機程式設計聽起來很sb,但是條件不允許只能這樣了.我想說的是,寫多了速度還是比較快的。輸入法會被你調戲的很聽話的。截圖舉個例子 當然。不可能和電腦比啦。 linux40 雖然學校做得不對,也連累了那些真心想學習的同學,不過不管哪個專業,在絕大多數人眼裡,電腦就是拿來玩遊戲的。這也是家長不想孩子...