c语言作业
#include<stdio.h> #include<conio.h> void swap(int *a,int *b) { int t; t=*a; *a=*b; *b=t; } main() { void swap(int *a,int *b); int m,n; scanf("%d,%d",&m,&n); int *p1; int *p2; p1=&m; p2=&n; swap(p1,p2); printf("%d,%d",m,n); getch();}
运行结果:
3,4
4,3
--------------------------------
Process exited after 3.482 seconds with return value 0
请按任意键继续. . .
void swap(int *p,int *q){int *m;*m=*p;*p=*q;*q=*m;}为何无法实现交换:
#include<stdio.h> #include<conio.h> void swap(int *a,int *b) { int *t; *t=*a; *a=*b; *b=*t; } main() { void swap(int *a,int *b); int m,n; scanf("%d,%d",&m,&n); int *p1; int *p2; p1=&m; p2=&n; swap(p1,p2); printf("%d,%d",m,n); getch();}
运行结果:
程序停止工作
原因:在程序中*m没有被初始化,形成野指针,也就是指向不可用内存区域的指针。通常对这种指针进行操作的话,将会使程序发生不可预知的错误。
void swap(int *p,int *q){int *m;m=p;p=q;q=m;}为何无法实现交换:
#include<stdio.h> #include<conio.h> void swap(int *a,int *b) { int t; t=a; a=b; b=t; } main() { void swap(int *a,int *b); int m,n; scanf("%d,%d",&m,&n); int *p1; int *p2; p1=&m; p2=&n; swap(p1,p2); printf("%d,%d",m,n); getch();}
运行结果:
3,4
3,4
--------------------------------
Process exited after 2.839 seconds with return value 0
请按任意键继续. . .
原因:因为在swap中被传输的是形参变量指针的值,并不是指针内存储的实参变量的地址,而形参指针变量的值改变不能使实参指针变量的值发生改变,所以无法进行交换
#include<stdio.h> #include<conio.h> void comp(int *a,int *b) { int t; t=*a; *a=*b; *b=t; } main() { void comp(int *a,int *b); int m,n; scanf("%d,%d",&m,&n); int *p1; int *p2; p1=&m; p2=&n; if(m<n) { comp(p1,p2); } printf("%d\n",m); getch(); }
运行结果:
7,2
7
--------------------------------
Process exited after 3.384 seconds with return value 0
请按任意键继续. . .
总结:c语言中,形参指针变量的值改变不能使实参指针变量的值发生改变,需要对指针内存储的实参地址进行交换,实参内存储的数据才会进行交换。
一个没有指向对象的指针被称为野指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,对野指针进行操作很容易造成程序错误。
在编写程序时,应当认真严谨,才能减少出错,当程序发生错误时,通过devc++下方的编译器了解具体出错位置,进行修改,不马虎,同时在日常生活中多写多练,熟能生巧。