有两点不符合规范,1,一般来说,自定义函数的原型应该写在main上面、头文件下面。因为你写在main里面的话,别的自定义函数就无法调用change函数了。只能让main调用他。
2,int a=1,b=1;我不知道为什么这么写不报错,只是警告,我一般是这么写的,int a=1;int b=1;或者 int a,b;
现在回答你的问题,你的a、b在main函数中没用被改变过,你的change函数没有返回值,又不是引用。所以是初始赋值的1。可以如下修改
#include
void change(int &x,int &y);
void main()
{
int a=1;int b=1;
change(a,b);
printf("a=%d\nb=%d\n",a,b);
}
void change(int &x,int &y)
{
x=x+1;
y=y+1;
}
当然,你把a、b声明成全局变量的话,也可以搞到,但是我不推荐^_^
c中函数的调用是按地址进行的。当程序执行到语句change(a,b)时,程序将实参a和b的值按地址传给形参x和y,程序为x和y开辟存储空间并执行函数change(x y)中的语句。一旦change函数中的语句执行完毕,程序转回main程序执行时,形参的存储空间将销毁不复存在,所给代码中用的都是值类型,不能将形参的改变传给实参,故实参的值都没有改变。
因为a,b都是值类型,当调用change的时候,值是被复制的,值在change方法中发生的变化并不会影响实参,所以输出是a=1,b=1
ps:www.w4wspace.com有很多关于C的资料,有空可以去看看。
函数 change(int x,int y)中的参数是值传递,调用之后不改变,将参数改为按地址传递change(int &x,int &y)即可实现你要的功能