C語言利用指標在函式中交換兩個數的思考

2021-07-25 10:09:30 字數 754 閱讀 5218

這個是乙個深刻理解指標和函式的問題。本來自己當初很認真的看過這個問題,可是現在搞運維去了,對linux倒是挺熟的,結果把以前的知識忘了。哎,真是悲哀。今天突然我女朋友問我,我一時還有點懵,這裡記錄一下。

void swap1(int *a,int *b)

int main()

開始就是這段**,我很快明白,這樣是無法成功的,因為位址在裡面不管怎樣交換和主函式沒有一點關係。因為函式在傳參的時候得到的是乙份複製。而且這份複製在函式結束時就已經消失了,所以主函式並沒有任何變化,交換不成功。

接著我又看到下面這段**

void swap2(int *a,int *b)

int main()

這段**的交換是成功的,有些人問為什麼成功呢?按照上面的思路傳入的不是乙個複製麼,為什麼能交換成功呢?因為雖然函式傳入的值是複製,那麼我們來看看這個複製到底是什麼。這個複製是乙個指向原本變數的指標,而我們利用這個指標可以間接訪問我們需要交換的原本的變數。然後我們將原本變數交換,後面再使用*p1和*p2訪問這個兩個變數,其實p1和p2的位址並沒有變,而是所指向的內容發生了變化。

這裡我也明白了函式需要對變數進行修改時,必須傳入指標,然後利用指標間接訪問變數,再對變數進行修改。這裡也必須對函式實參和形參傳遞理解清楚。

C語言 交換兩個變數的

c語言中交換兩個變數值 a,b 的幾種方法 1 利用臨時變數 int temp temp a a b b temp 2 不用臨時變數 這種方法有可能溢位 a a b b a b a a b 3 用按位運算子 這種方法不適合浮點數 a a b b a b a a b 4 記憶體拷貝方法 個人覺得這種方...

c語言 兩個值的交換

指標的呼叫 交換兩個數值 一 子函式 被呼叫函式 的改變要想修改父函式 呼叫函式 的值需要 1.傳指標 2.解引用 二 的實現過程 錯誤一 void swap int a,int b int tmp tmp a a b b tmp int main int a 10 int b 20 swap a,...

C中利用指標交換兩個變數值的一點誤區

include void swap int a,int b void main 上面這段 可以實現交換兩個資料,但是有的人會存在乙個誤區,就是會認為是位址發生了交換,這種想法是錯誤的,在swap這個函式的呼叫時,我們通過傳入a和b的位址,並在swap函式體中接收的 a和 b其實就是 a和 b,這一點...