void swap(int x,int y)
{ int temp;
temp=x;
x=y;
y=temp;
printf("/n(swap):%d,%d/n",x,y);
}
void main()
{ int a,b;
scanf("%d,%d",&a,&b);
if(a<b) swap(a,b);
printf("/n(main):%d,%d/n",a,b);
}
这显然是一个值传递的过程。假设我们从键盘输入两个数据:5,9,先来看一下运行结果:
(swap):9,5
(main):5,9
按照值传递的特点,我们可以很清楚的看到,虽然在swap函数中暂时使得运行结果显示了交换后的数据,即达到了交换的目的,但实际情况却是随着swap函数的结束,被作为局部参数的形参x,y以及swap函数本身的局部参数temp都将结束其生存期,在内存中的存储空间被释放。因此实参a,b的并未受到影响,依然保持原值。
从这道程序中我们也可以学到一个方法,比如有时不需要修改实参,但是又需要被调函数所作的工作能够得以体现,就可以灵活的在被调函数中使用打印语句。因此上面的程序可以改写为:
void swap(int x,int y)
{ int temp;
temp=x;
x=y;
y=temp;
printf("/n从大到小排列的顺序为:%d,%d/n",x,y);
}
main()
{ int a,b;
scanf("%d,%d",&a,&b);
if(a<b) swap(a,b);
}
在输入5,9两个数字后,得到的执行结果是:
从大到小排列的顺序为:9,5
你看这样就可以使用相对容易理解的值传递方式,巧妙的解决问题了,并得到了想要的答案,虽然我们并未真正的让主函数中的两个变量发生改变。
再来看地址传递方式:
void swap(int *p,int *q)
{ int temp;
temp=*p;
*p=*q;
*q=temp;
}
void main()
{ int a,b;
int *pointer_1=&a,*pointer_2=&
scanf("%d,%d",&a,&b);
if(a<b) swap(a,b);
printf("/n%d,%d/n",a,b);
}
假设我们从键盘输入两个数据:5,9,先来看一下运行结果:
9,5
在这个程序中用指针变量作参数,虽然传送的是变量的地址,但实参和形参之间的数据传递依然是单向的“值传递”,即调用函数不可能改变实参指针变量的值。但它不同于一般值传递的是,它可以通过指针间接访问的特点来改变指针变量所指变量的值,即最终达到了改变实参的目的。
{ int temp;
temp=x;
x=y;
y=temp;
printf("/n(swap):%d,%d/n",x,y);
}
void main()
{ int a,b;
scanf("%d,%d",&a,&b);
if(a<b) swap(a,b);
printf("/n(main):%d,%d/n",a,b);
}
这显然是一个值传递的过程。假设我们从键盘输入两个数据:5,9,先来看一下运行结果:
(swap):9,5
(main):5,9
按照值传递的特点,我们可以很清楚的看到,虽然在swap函数中暂时使得运行结果显示了交换后的数据,即达到了交换的目的,但实际情况却是随着swap函数的结束,被作为局部参数的形参x,y以及swap函数本身的局部参数temp都将结束其生存期,在内存中的存储空间被释放。因此实参a,b的并未受到影响,依然保持原值。
从这道程序中我们也可以学到一个方法,比如有时不需要修改实参,但是又需要被调函数所作的工作能够得以体现,就可以灵活的在被调函数中使用打印语句。因此上面的程序可以改写为:
void swap(int x,int y)
{ int temp;
temp=x;
x=y;
y=temp;
printf("/n从大到小排列的顺序为:%d,%d/n",x,y);
}
main()
{ int a,b;
scanf("%d,%d",&a,&b);
if(a<b) swap(a,b);
}
在输入5,9两个数字后,得到的执行结果是:
从大到小排列的顺序为:9,5
你看这样就可以使用相对容易理解的值传递方式,巧妙的解决问题了,并得到了想要的答案,虽然我们并未真正的让主函数中的两个变量发生改变。
再来看地址传递方式:
void swap(int *p,int *q)
{ int temp;
temp=*p;
*p=*q;
*q=temp;
}
void main()
{ int a,b;
int *pointer_1=&a,*pointer_2=&
scanf("%d,%d",&a,&b);
if(a<b) swap(a,b);
printf("/n%d,%d/n",a,b);
}
假设我们从键盘输入两个数据:5,9,先来看一下运行结果:
9,5
在这个程序中用指针变量作参数,虽然传送的是变量的地址,但实参和形参之间的数据传递依然是单向的“值传递”,即调用函数不可能改变实参指针变量的值。但它不同于一般值传递的是,它可以通过指针间接访问的特点来改变指针变量所指变量的值,即最终达到了改变实参的目的。