关于利用指针进行数字互换笔记
第一次写优快云博客,如有错误请多多指教
首先
先写出不利用函数实现的数字互换
#include<stdio.h>
int main(void)
{
int a=3;
int b=9;
int temp;
//进行a和b参数互换
temp = a;
a=b;
b=temp;
printf("a=%d\n,b=%d\n ",a,b);//输出a和b结果
}

## 利用这一原理,尝试利用函数写这个程序
#include<stdio.h>
void Swap(int,int);
int main(void)
{
int a = 3;
int b =9;
Swap(a,b);
printf("a=%d\nb=%d\n",a,b);
return 0;
}
void Swap(int a,int b)
{
int t;
t=a;
a=b;
b=t;
return;
}
## **经过一番研究得知**
主函数传递实参到Swap函数形参当中,经过函数处理后,Swap内形参由此前的a=3,b=9变为a=9,b=3
出现这种情况的原因是因为Swap函数与主函数内的a和b并不是一样的,两者都属于局部变量,使用范围仅用于本函数内部;
并且当Swap函数执行完毕后,在执行下一句输出之前,静态空间已经被释放。
## 利用指针可以完美解决这个问题
#include<stdio.h>//调用标准库
void Swap(int *,int *);//函数前置声明
int main(void)
{
int a = 3;
int b = 9;
Swap(&a,&b);// 调用函数并取出指针地址
printf(“a=%d\nb=%d\n”,a,b);
return 0;
}
void Swap(int * t1,int * t2)
{
int temp;// 互换*t1 *t2,temp使用int类型,int *类型与形参类型不符,编译报错
temp = t1;// t1是int * 类型, t1是int类型
*t1 = *t2; // *t1代表的是以t1的数据为地址的变量
*t2 = temp;
return;
}