1. 程式人生 > >關於兩個數字順序顛倒函式的幾種常見錯誤

關於兩個數字順序顛倒函式的幾種常見錯誤

在我沒學指標之前,編寫兩個數字顛倒的這個函式時,我感覺沒有太大的問題,但是老師給我們講了指標的相關的知識後,這個函式的問題就出現了以下問題:

(前提是不允許在函式中使用列印函式)第一個函式一直到第三個函式的錯誤都是沒有把數字換過來,例如在下面這個主函式中,輸入a=10,b=20,呼叫函式後,得到的結果還是a=10,b=20。在這個函式的問題上,要用指標解決。其實指標也就是地址,但是指標特別的地方就是可以間接訪問,在編寫程式的時候,不能使用未初始化的指標,也不能使用野指標,這樣的話在主函式呼叫函式的時候就不會出現崩潰或者沒有調換順序的問題。

這幾個問題都是比較常見的錯誤,希望大家能引以為鑑,本文只是我自己的一些見解,僅供參考。

void Swap_err1(int a,int b)

{
int tmp;
tmp = a;
a = b;
b = tmp;
}

void Swap_err2(int *p1,int *p2)

int *tmp;//沒有初始化

tmp = p1;
p1 = p2;
p2 = tmp;
}
void Swap_err3(int *p1,int *p2)
{
int *tmp = (int *)10000; // 野指標,懸掛指標:沒有指向有效的地址
int *tmp;
*tmp = *p1;//崩潰
*p1 = *p2;
*p2 = *tmp;
}
void Swap(int *p1,int *p2)//成功
{
int tmp = *p1;
*p1 = *p2 ;
*p2 = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("%d,%d\n",a,b);
Swap(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}