1. 程式人生 > >指標與數值交換

指標與數值交換

#include<stdio.h>
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;
}

上圖為指標資料交換邏輯圖

普通數值交換

void Swap(int a,int b)
{
	int tmp = a;
	a = b;
	b = tmp;
	printf("%d,%d\n",a,b);
}
int main()
{
	int a = 10;
	int b = 20;
	printf("%d,%d\n",a,b);
	Swap(a,b);
	return 0;
}

指標數值交換與之前的數值交換不同,指標交換是徹底的交換它將變數的地址及儲存的數值一同交換;而之前的數值交換隻交換數值不交換地址;

交換前:p1整形地址變數儲存a的地址,*p1解引用為a;p2整形地址變數儲存b的地址,*p2解引用為b;

交換後:p1整形地址變數儲存b的地址,*p1解引用為b;p2整形地址變數儲存a的地址,*p2解引用為a;

通過一個tmp變數實現數值與地址同時交換;

交換過程:把*p1賦值給tmp,此時tmp等於變數a,*p2賦值給*p1,此時*p1解引用為變數b,tmp賦值給*p2,此時*p2解引用為變數a;