兩個數的交換——指標
阿新 • • 發佈:2018-12-30
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; }
void Swap1(int a,int b)
{
int tmp = a;
a = b;
b = tmp;
printf("%d,%d\n",a,b);
}
通常我們寫兩個數交換採用函式Swap,但在子函式中形參僅僅是與實參的值相同,子函式中a,b與main函式中值相同,但這兩個不是同一個地址,不能代表同一個變數,所以Swap函式中只是把變數值交換,但a與b在main中還是沒有進行交換。
因為我們雖然傳得是a,b的地址但我們仍然是在p1,p2兩個指標上進行交換,沒有轉到a,b上,所以這個Swap2函式中p1,p2中的地址地址進行交換了但與a,b沒有任何關係開始是p1與a 有關係,p2與b有關係,現在是p2與a有關係p1與b有關係,a,b值仍未交換。
void Swap3(int *p1,int *p2) { int *tmp;//野指標,懸掛指標 *tmp = *p1; *p1 = *p2; *p2 = *tmp; }
void Swap(int *p1,int *p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
因為在Swap3中我們定義了一個野指標,那我們現在就不用野指標,定義這個指標作用就是接下來儲存a的值,那我們就定義一個整形變數儲存a的值,*p1也就相等於a,*p2也就相當於b這時候兩者進行交換就成功交換了,在main中也被交換了。總結:當一個函式想要影響另一個函式時,我們要有兩個條件(1)進行指標傳參(2)要對指標進行解引用