目录
swap数值交换方法:
改进后的change3算法:
swap数值交换方法:
change2()与change3()方法正确,change1()为错误实例演示,运行程序可以看到指针指向地址数值,从而理解错误原因。(change3为改进算法)
#include#include //int *p1,*p2,*p3; int main() { void change1(int *b1,int *b2);//声明函数 void change2(int *b1,int *b2);//声明函数 void change3(int *b1,int *b2);//声明函数 printf("pointer!n"); int a1,a2,a3; a1=1; a2=2; a3=3; int *p1,*p2,*p3=&a3; //p3=&a3; p1=&a1; p2=&a2; printf("未互换地址时p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3); printf("----------------------------------------n"); printf("错误实例,仅改指针b1,b2值,p1,p3并未变n"); printf("未互换P:%d,%d,%dn",p1,p2,p3); change1(p1,p3);//等价change(&a1,&a3); printf("互换后P:%d,%d,%dn",p1,p2,p3); printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3); printf("----------------------------------------n"); //使用改进实例需要将其余部分注释掉,因为全局变量和局部变量重名冲突了 // printf("改正实例:既然是p1,p2没交换,最后更改以下即可n");//需要定义指针为全局变量 // printf("p1=b1,p3=b2n"); // printf("未互换P:%d,%d,%dn",p1,p2,p3); // change3(p1,p3);//等价change(&a1,&a3); // printf("互换后P:%d,%d,%dn",p1,p2,p3); // printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3); // // printf("----------------------------------------n"); printf("正确实例:既然是a1,a2对象交换,函数就要进行对象的交换*p1,*p2n"); printf("p1->a1;temp=a1;p1=p2->a2;p2=temp->a1n"); printf("未互换P:%d,%d,%dn",p1,p2,p3); change2(p1,p3);//等价change(&a1,&a3); printf("互换后P:%d,%d,%dn",p1,p2,p3); printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3); printf("----------------------------------------n"); return 0; } void change1(int *b1,int *b2){ int *b=NULL;//防止野指针 b=b1;//b存b1存储的地址值 b1=b2; b2=b;//b1 ,b2存储的地址值互换 printf("互换后B:%d,%dn",b1,b2); } void change3(int *b1,int *b2){ int *b=NULL;//防止野指针 b=b1;//b存b1存储的地址值 b1=b2; b2=b;//b1 ,b2存储的地址值互换 printf("互换后B:%d,%dn",b1,b2); p1=b1; p3=b2; printf("互换后P:%d,%dn",p1,p2); } void change2(int *b1,int *b2){ int temp;// temp=*b1;// *b1=*b2; *b2=temp;//b1 ,b2存储的地址值互换 printf("互换后B:%d,%dn",b1,b2); }
改进后的change3算法:
#include
#include
int *p1,*p2,*p3;
int main()
{
void change2(int *b1,int *b2);//声明函数
printf("pointer!n");
int a1,a2,a3;
a1=1; a2=2; a3=3;
//int *p1,*p2,*p3=&a3;
p3=&a3;
p1=&a1;
p2=&a2;
printf("----------------------------------------n");
//使用改进实例需要将其余部分注释掉,因为全局变量和局部变量重名冲突了
printf("改正实例:既然是p1,p2没交换,最后更改以下即可n");//需要定义指针为全局变量
printf("p1=b1,p3=b2n");
printf("未互换P:%d,%d,%dn",p1,p2,p3);
change3(p1,p3);//等价change(&a1,&a3);
printf("互换后P:%d,%d,%dn",p1,p2,p3);
printf("互换地址后p1,p2,p3:%d,%d,%dn",*p1,*p2,*p3);
printf("----------------------------------------n");
return 0;
}
void change3(int *b1,int *b2){
int *b=NULL;//防止野指针
b=b1;//b存b1存储的地址值
b1=b2;
b2=b;//b1 ,b2存储的地址值互换
printf("互换后B:%d,%dn",b1,b2);
p1=b1;
p3=b2;
printf("互换后P:%d,%dn",p1,p2);
}
【C语言】深入浅出谈指针:理解指针、指针定义和指针代码实例swap(代码详细注释,含易错实例以及改进办法)



