函数值的交换
《函數值的交換》
交換函數的幾種方式:
(1)
//error
int?Swap1(int?a,int?b)
{
int?tmp;
tmp = a;
a?= b;
b?= tmp;
return?0;
}
在函數Swap1中,a和b的地址的值并沒有交換。只是把10和20賦給了a和b,a和b原本的值并沒有改變。
(2)
#include<stdio.h>
int?Swap2(int?*p1,int?*p2)//error
{
int?*tmp;
tmp = p1;
p1?= p2;
p2?= tmp;
return?0;
}
int?main()
{
int?a = 10;
int?b = 20;
printf("%d %d\n",a,b);
Swap2(&a,&b);
printf("%d %d\n",a,b);
return?0;
}
在函數Swap2中,指針p1和p2分別指向a和b的地址,交換指針p1和p2,只是讓指針p1指向b,指針p2指向a,a和b的值還是沒有交換。
(3)
#include<stdio.h>
int?Swap3(int?*p1,int?*p2)
{
int?*tmp;
*tmp = *p1;
*p1= *p2;
*p2= *tmp;
return?0;
}
int?main()
{
int?a = 10;
int?b = 20;
printf("%d %d\n",a,b);
Swap3(&a,&b);
printf("%d %d\n",a,b);
return?0;
}
?
*tmp是一個野指針,又叫做懸掛指針,野指針是指沒有指向有效(能訪問)的地址的指針。
注:一個指針要想修改另一個函數的數據,必須傳指針和解引用
一個變量只能訪問自己定義的變量,而不能隨機訪問一個變量,所以系統會崩潰掉。
(4)
#include<stdio.h>
int?Swap(int?*p1,int?*p2)//true
{
int?tmp;
tmp = *p1;
*p1= *p2;
*p2= tmp;
return?0;
}
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;
}
?
這個函數里既傳了指針,又進行了解引用,把*p1解引用的值a賦給tmp這個變量,把*p2解引用的值b賦給p1,把*p2解引用的值b賦給p2,這樣就交換了a和b的值。
總結
- 上一篇: linux查看发起ddos攻击的ip,在
- 下一篇: pt100温度传感器c语言,pt100测