形参的数值改变不会改变实参的值

来源:互联网 发布:三国杀卡牌制作软件 编辑:程序博客网 时间:2024/06/06 18:07

输入a、b两个整数,用指针按先大后小的顺序输出a和b

正确代码:#include<stdio.h>
void swap(int *p1,int *p2){
int  temp;
 temp=*p1;
*p1=*p2;
*p2= temp;
}
void main(){
int *max,*min,a,b;
printf("请输入整数a:");
scanf("%d",&a);
printf("请输入整数b:");
scanf("%d",&b);
max=&a;
min=&b;
if(*max<*min){
swap(max,min);

printf("max=%d\nmin=%d\n",*max,*min);
 
}

错误代码如下:

(1)
void swap(int *p1,int *p2){
int *temp;
temp=p1;
p1=p2;
p2=temp;
}

(2)void swap(int  p1,int  p2){
int  temp;
temp=p1;
p1=p2;
p2=temp;
}


形参值的改变不能使实参的值随之改变,在函数结束时,形参会释放,不可能通过调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指的值(即正确做法)。

(3)void swap(int *p1,int *p2){
int *temp;
*temp=*p1;
*p1=*p2;
*p2=*temp;
}

*temp=*p1;是错误的,因为由于未给temp赋值,因此temp并无确定的值(其值不可预见),因此temp所指向的单元也不可预见,这个未知的存储单元可能存储着有用的数据,这样可能破坏系统正常的工作状况。故程序无法运行



原创粉丝点击