#include<stdio.h> void swap(int *p,int *q)//定义一个swap函数,用于交换两个变量的值 { int c; c=*p; *p=*q; *q=c; } int main(){ int a,b; int *p1,*p2; scanf("%d%d",&a,&b); p1=&a;p2=&b;//将a,b变量的地址分别赋值给指针变量p1,p2 swap(p1,p2);//执行swap函数体,使指针*p,*q的值交换 printf("\n%d %d\n",a,b);//输出已经交换过的a,b的值 return 0; }
2 3 3 2 -------------------------------- Process exited after 2.188 seconds with return value 0 请按任意键继续. . .
问题一:
#include<stdio.h> void swap(int *p1,int *p2){ int *p; p=p1; p1=p2; p2=p; printf("p1= %d\n",*p1); printf("p2= %d\n",*p2); } int main(){ int a,b; int *c,*d; scanf("%d %d",&a,&b); c=&a;d=&b; swap(c,d); printf("a= %d\n",a); printf("b= %d\n",b); return 0; }
1 0 p1= 0 p2= 1 a= 1 b= 0 -------------------------------- Process exited after 6.791 seconds with return value 0 请按任意键继续. . .
总结1:由运行结果可知
swap函数中两个参数的值改变,然而主函数中a,b的值并为改变。因为调用函数中,是值传递。只是swap中值进行交换,主函数中没有交换。
#include<stdio.h> void swap(int *p1,int *p2){ int *p; *p=*p1; *p1=*p2; *p2=*p; printf("p1= %d\n",*p1); printf("p2= %d\n",*p2); } int main(){ int a,b; int *c,*d; scanf("%d %d",&a,&b); c=&a;d=&b; swap(c,d); printf("a= %d\n",a); printf("b= %d\n",b); return 0; }
总结:此代码编译时候没有错误,但是不能运行。
我进行了调试,如下:
#include<stdio.h> void swap(int *p1,int *p2){ int *p; //*p=*p1; // *p1=*p2; //*p2=*p; printf("p1= %d\n",*p1); printf("p2= %d\n",*p2); } int main(){ int a,b; int *c,*d; scanf("%d %d",&a,&b); c=&a;d=&b; swap(c,d); printf("a= %d\n",a); printf("b= %d\n",b); return 0; }
5 6 p1= 5 p2= 6 a= 5 b= 6 -------------------------------- Process exited after 1.964 seconds with return value 0 请按任意键继续. . .
由此可知
//*p=*p1;语句以下有错误。
接着进行下一步调试,如下:
#include<stdio.h> void swap(int *p1,int *p2){ int *p; *p=*p1; // *p1=*p2; //*p2=*p; printf("p1= %d\n",*p1); printf("p2= %d\n",*p2); } int main(){ int a,b; int *c,*d; scanf("%d %d",&a,&b); c=&a;d=&b; swap(c,d); printf("a= %d\n",a); printf("b= %d\n",b); return 0; }
这个代码不能正常运行可知
// *p=*p1;语句开始有错误;
原因为*p是一个指针变量,p指向的内容不知道。然而p并没有确切的值,因此p所确定的元素是无法预料的。