第二次作业
Posted 何丽婷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二次作业相关的知识,希望对你有一定的参考价值。
#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 c; c=*p1; *p1=*p2; *p2=c; }
5 6 6,5 -------------------------------- 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; }
5 6 p1= 6 p2= 5 a= 5 b= 6 -------------------------------- Process exited after 6.791 seconds with return value 0 请按任意键继续. . .
原因:由编译运行的结果可知调用的swap函数中的两个参数的值发生了改变,但是主函数中的a,b的值没有发生改变。这是因为调用函数中只是值传递,swap函数中的值进行了交换,主函数中并没有。
总结:1、作用swap函数可以起到交换两个变量的值的作用,同时,使用指针作为形参,实参是pointer_1和pointer_2,在函数调用时,将实参传递给形参,采用值传递的方法,虚实结合,使编程更整齐,美观,便捷。
2、在编程时,出现了一些知识性的问题,在值传递时,应定义一个整形变量,不可以再定义一个指针,同时,主函数前面应该用int,而不是void。
3、平时编程时,应该明确每一步是用来干什么的,想我这次出现的错误可以给我一个很好的提醒,在编程时注意变量类型以及一些细小的细节。
#include<stdio.h> int main(){ void swap(int *p1,int *p2); int a,b; int *m,*n; scanf("%d %d",&a,&b); m=&a;n=&b; swap(n,n); printf("a= %d\\n",a); printf("b= %d\\n",b); return 0; } void swap(int *p1,int *p2){ int *p; *p=*p1; *p1=*p2; *p2=*p; printf("p1= %d\\n",*p1); printf("p2= %d\\n",*p2); }
总结:该代码编译时没有错误,但是不能运行,进行调试如下:
include<stdio.h> voidswap(int*p1,int*p2){int*p; //*p=*p1; //*p1=*p2; //*p2=*p; printf("p1= %d\\n",*p1); printf("p2= %d\\n",*p2); } int main(){inta,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);return0; }
2 3 p1=2 p2= 3 a= 2 b= 3 -------------------------------- Process exited after 1.964 seconds with return value 0 请按任意键继续. . .
这个代码能正常运行,可知
//*p=*p1; 语句有毛病
以上是关于第二次作业的主要内容,如果未能解决你的问题,请参考以下文章