#include
exchange(int x,int y){
int a=x;
x=y;
y=a;}
void main(){
int a=1;
int b=2;
exchange(a,b);
printf("%d%d",a,b);}
=========================
求问为什么程序出来的不是21??????~~
这不是按地址传值。函数内部改变对外部不影响。
这是变量的作用域问题,你传进去的是形参的值,计算机会在内存开辟一个空间,存储形参的值,相当于exchange函数中的a,b变量单元和main函数中的变量单元其实是不一样的,所以在exchange函数中修改变量的值是没用的,要想改掉a,b的值可以传a,b地址给exchange函数
#include
exchange(int &x,int &y){
int a=x;
x=y;
y=a;}
void main(){
int a=1;
int b=2;
exchange(a,b);
printf("%d%d",a,b);}
exchange(int x,int y) x ,y是入参值传递。是把全局域a,b拷贝给了exchange函数内部域的x,y变量,两者不是同一个对象,对x,y的修改自然也不会作用到外部的a,b。需要按引用或指针传递才可。
在C中,实参向形参的数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中是不同的存储单元。在调用函数时
,给形参分配存储单元,并将实参对应的值传给形参,在调用完成后,形参的单元会被释放,实参单元仍保持原值。所以,在执行一个函数调用时,形参
的值如果发生改变,并不会改变主函数内实参的值!!!
在C中,实参向形参的数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中是不同的存储单元。在调用函数时
,给形参分配存储单元,并将实参对应的值传给形参,在调用完成后,形参的单元会被释放,实参单元仍保持原值。所以,在执行一个函数调用时,形参
的值如果发生改变,并不会改变主函数内实参的值!!!