麻烦解析下程序调用函数的输出结果,该怎么解决

麻烦解析下程序调用函数的输出结果
#include<iostream.h>
//func()函数的适当说明(1)、(2)、(3)
main()
{int x=5;
 int y=18;
 func(x,y);
 cout<<"X is"<<x<<",Y is"<<y<<"\n";
 return 0;
}
(1)void func(int a,int b)
{a=a+1;
 b=b-2;
 cout<<"A is"<<a<<",B is"<<b<<"\n";
 return ;
}
(2)void func(int a,int &b)
{a=a+1;
 b=b-2;
 cout<<"A is"<<a<<",B is"<<b<<"\n";
 return ;
}
(1)void func(float & a,float & b)
{a=a+1;
 b=b-2;
 cout<<"A is"<<a<<",B is"<<b<<"\n";
 return ;
}


RT

------解决方案--------------------
C/C++ code
void func(int a,int b) // 值传递,函数内操作临时变量,主函数变量不变
// 主函数输出:5 18

void func(int a,int &b) // 值传递和引用传递,引用会修改原始值
// 主函数输出:5 16

void func(float & a,float & b)
// 主函数输出:6 16

------解决方案--------------------
1. 传值调用,x、y的值保持不变
2. x保持不变还是5,y变成16
3. 类型不匹配,编译不过。
如果是void func(int &a,int &b),那么x、y的值都会变。
------解决方案--------------------
void(float& a,float& b)因为和int类型不匹配进行提升先转化为float,生成临时变量,所以主函数x,y不会变。
------解决方案--------------------
探讨
引用:
C/C++ code
void func(int a,int b) // 值传递,函数内操作临时变量,主函数变量不变
// 主函数输出:5 18

void func(int a,int &amp;amp;b) // 值传递和引用传递,引用会修改原始值
// 主函数输出:5 16

void func(float &amp;amp; a,……