第二次作业
#include<stdio.h> int main() { void swap(int *p1,int *p2); int a,b; int *pointer_1,*pointer_2; scanf("%d%d",&a,&b); pointer_1=&a; pointer_2=&b; swap(pointer_1,pointer_2); printf("%d,%d\n",a,b); } void swap(int *p1,int *p2) { int m; m=*p1; *p1=*p2; *p2=m; }
9 5 5,9 -------------------------------- Process exited after 3.006 seconds with return value 0 请按任意键继续. . .
#include<stdio.h> int main() { void swap(int *p1,int *p2); int a,b; int *pointer_1,*pointer_2; scanf("%d%d",&a,&b); pointer_1=&a; pointer_2=&b; swap(pointer_1,pointer_2); printf("%d,%d\n",a,b); } void swap(int *p1,int *p2) { int *m; *m=*p1; *p1=*p2; *p2=*m; }
总结:在*p1和*p2交换的过程中,要注意不可以写*m=*p1。因为*p1就是a,是整形变量。而*m是指针变量m所指向的变量。但m中并无确定的值,因此m所指向的单元也是不可预见的。所以,对*m赋值有可能给一个存储着重要数据的存储单元赋值,这样就会破坏系统的正常工作状况。
#include<stdio.h> int main() { void swap(int *p1,int *p2); int a,b; int *pointer_1,*pointer_2; scanf("%d%d",&a,&b); pointer_1=&a; pointer_2=&b; swap(pointer_1,pointer_2); printf("%d,%d\n",a,b); } void swap(int *p1,int *p2) { int *m; m=p1; p1=p2; p2=m; }
9 5 9 5 -------------------------------- Process exited after 3.006 seconds with return value 0 请按任意键继续. . .
总结:swap函数中两个数交换了值,但是主函数中没有交换。