天天看點

關于兩個數交換

關于兩個數交換

下面5個函數,哪個能成功交換兩個數?

第一個函數

void swap1(int p, int q) {
    int      
很明顯不能交換兩個數。盡管局部變量被交換了,但是随着局部變量生命周期的結束,不會影響主函數的a,b值。

第二個函數

void swap2(int *p, int *q) {
    int *temp;
    *temp = *p;
    *p = *q;
    *q = *temp;
}      

不能交換,注意int *temp;建立了一個指針,但是沒有給指針配置設定記憶體,也就是說指針現沒有指向實際的位址。*temp = *p;是把*p指向記憶體裡的值賦給*temp指向的記憶體中,這塊記憶體由于是随機配置設定的,在函數結束後不會收回,容易造成記憶體洩漏。在有的編譯器中,代碼會報錯。

比如,我在DevC++中測試就報錯了。

第三個函數

void swap3(int *p, int *q) {
    int *temp;
    temp = p;
    p = q;
    q      
這裡的int *temp;也存在記憶體洩漏的問題。這個函數實作的功能是,局部變量指針的交換。在函數結束後,主函數的指針依舊指向原來的位址,是以不能實作交換。

第四個函數

void swap4(int *p, int *q) {
    int temp;
    temp = *p;
    *p = *q;
    *q      

第五個函數

void swap5(int &p, int &q) {
    int      

繼續閱讀