1、指针经典程序交换两个数字
#include <stdio.h>
#include <stdlib.h>
void Swap1(int a,int b)
{
//交换的是形参a,b的值
int t;
t=a;
a=b;
b=t;
}
void Swap2(int* p,int* q)
{
int* t;
t=p;
p=q;
q=t;
//执行完后p保存的是b的地址,q保存的是a的地址,
//但是主函数中的a,b的地址始终没有变,值也没有变化。
//例如:a的地址是1000H,存放的值是3,b的地址是2000H,存放的值是5,
//调用Swap2函数,把a的地址1000H赋给p,b的地址2000H赋给q,
//经过函数执行后:p保存了b的地址(p=2000H),
//q保存了a的地址(q=1000H),而对主函数中的a,b并无影响.
}
void Swap3(int* p,int* q)
{
//p指向a的地址,所以*p就是a的值,q指向b的地址,所以*q就是b的值
//p是int*类型,*p就是int类型
int t;
t=*p;
*p=*q;
*q=t;
}
int main(void)
{
int a=3;
int b=5;
//Swap1(a,b);//输出的是3,5,不能实现互换
//Swap2(&a,&b);//输出的还是3,5,不能实现互换
Swap3(&a,&b);//实现了互换,输出是5,3
printf("a=%d, b=%d\n",a,b);
system("pause");
return 0;
}
2、*号的含义
3、如何通过被调函数修改主调函数普通变量的值
#include <stdio.h>
#include <stdlib.h>
void f(int* p,int* q)
{
//p指向a的地址,*p就是a的值,改变*p的值就是改变a的值
*p=1;
*q=2;
}
int main(void)
{
int a=3;
int b=5;
f(&a,&b);//把a,b的值都给修改了
printf("a=%d, b=%d\n",a,b);
system("pause");
return 0;
}