交換2個數

2021-06-25 20:38:08 字數 672 閱讀 1192

交換兩個數的順序,可以交換位址,可以交換值。當用函式呼叫法交換位址的時候,為什麼不可以實現。程式如下:

這樣可以實現兩個數的交換

#include void swap(int *x,int *y);

void main()

void swap(int *x,int *y)

#include為什麼這個方法為什麼就不能實現。

main()

int swap(int *a,int *b)

}我的問題核心是:乙個程式可以實現兩個數的交換,是不是因為:首先把pa,pb分別儲存在x,y,然後再x,y的儲存空間提出pa,pb。通過交換pa,pb指向的a和b,從而達到交換目的?而第二個程式:首先把pa,pb分別儲存在x,y,然後再把x,y的儲存空間裡把pa,pb交換指向,但是返回main函時x,y所佔的空間已經被釋放,並沒有把pa和pb傳遞給pa和pb本身位址,因此,不能達到交換目的???

兩段**的差異是:

第二段**:將a、b兩個數的位址傳入swap()函式,此函式內部將這兩個位址彼此做了交換(即兩個指標所指的位址發生了互換,但相應位址下的數並沒有變化)。因為對於函式swap()來說,傳入的兩個位址是值傳遞形式的,在其內部是區域性作用域下的兩個變數,完成這兩個位址「值」的交換,並不能對呼叫時的實參產生影響。故而交換失敗。

交換2個數值的方法

如何交換2個變數的值?一般來說,想到的方法是再找乙個臨時變數,通過一種順序存放的方式來達到交換值的效果。比如有a,b這2個變數。取同型別的變數temp。這樣就完成了交換。但這樣做的話會多使用乙個temp的記憶體。如果沒有溢位的問題,可以嘗試加減法。a a b b a b a a b 換成數 算來表示...

2個數之間的水仙花數

春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的 水仙花數 是指乙個三位數,它的各位數字的立方和等於其本身,比如 153 1 3 5 3 3 3。現在要求輸出所有在m和n範圍內的水仙花數。輸入資料有多組,每組佔一行,包括兩個整數m和n 100 m n 999 對於每個...

查詢陣列中最大的2個數

1 在c語言的被呼叫函式中,沒有辦法求出陣列實參的大小,因此需要顯示傳遞array length引數。詳見部落格 c語言記憶體分配時間。2 以o n 的計算時間得出結果。include void find 2 largest int array,int array length,int plarge...