赞
踩
目录
change2()与change3()方法正确,change1()为错误实例演示,运行程序可以看到指针指向地址数值,从而理解错误原因。(change3为改进算法)
- #include <stdio.h>
- #include <stdlib.h>
-
- //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,%d\n",*p1,*p2,*p3);
- printf("----------------------------------------\n");
- printf("错误实例,仅改指针b1,b2值,p1,p3并未变\n");
- printf("未互换P:%d,%d,%d\n",p1,p2,p3);
- change1(p1,p3);//等价change(&a1,&a3);
- printf("互换后P:%d,%d,%d\n",p1,p2,p3);
- printf("互换地址后p1,p2,p3:%d,%d,%d\n",*p1,*p2,*p3);
-
- printf("----------------------------------------\n");
-
- //使用改进实例需要将其余部分注释掉,因为全局变量和局部变量重名冲突了
- // printf("改正实例:既然是p1,p2没交换,最后更改以下即可\n");//需要定义指针为全局变量
- // printf("p1=b1,p3=b2\n");
- // printf("未互换P:%d,%d,%d\n",p1,p2,p3);
- // change3(p1,p3);//等价change(&a1,&a3);
- // printf("互换后P:%d,%d,%d\n",p1,p2,p3);
- // printf("互换地址后p1,p2,p3:%d,%d,%d\n",*p1,*p2,*p3);
- //
- // printf("----------------------------------------\n");
-
- printf("正确实例:既然是a1,a2对象交换,函数就要进行对象的交换*p1,*p2\n");
- printf("p1->a1;temp=a1;p1=p2->a2;p2=temp->a1\n");
- printf("未互换P:%d,%d,%d\n",p1,p2,p3);
- change2(p1,p3);//等价change(&a1,&a3);
- printf("互换后P:%d,%d,%d\n",p1,p2,p3);
- printf("互换地址后p1,p2,p3:%d,%d,%d\n",*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,%d\n",b1,b2);
- }
-
- void change3(int *b1,int *b2){
- int *b=NULL;//防止野指针
- b=b1;//b存b1存储的地址值
- b1=b2;
- b2=b;//b1 ,b2存储的地址值互换
- printf("互换后B:%d,%d\n",b1,b2);
- p1=b1;
- p3=b2;
- printf("互换后P:%d,%d\n",p1,p2);
- }
-
- void change2(int *b1,int *b2){
- int temp;//
- temp=*b1;//
- *b1=*b2;
- *b2=temp;//b1 ,b2存储的地址值互换
- printf("互换后B:%d,%d\n",b1,b2);
-
-
- }
- #include <stdio.h>
- #include <stdlib.h>
-
- 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=b2\n");
- printf("未互换P:%d,%d,%d\n",p1,p2,p3);
- change3(p1,p3);//等价change(&a1,&a3);
- printf("互换后P:%d,%d,%d\n",p1,p2,p3);
- printf("互换地址后p1,p2,p3:%d,%d,%d\n",*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,%d\n",b1,b2);
- p1=b1;
- p3=b2;
- printf("互换后P:%d,%d\n",p1,p2);
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。