描述
定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值.
输入
两个数,空格隔开
输出
交换后的两个数,空格隔开
输入样例 1
5 2
输出样例 1
2 5
输入样例 2
3 8
输出样例 2
8 3
代码一(如下):
#include <iostream>
using namespace std;
void change(int a, int b) //函数定义
{
int t;
t = a;
a = b;
b = t;
cout << a << " " << b;
}
int main()
{
void change(int, int); // 函数内部声明
int a, b;
cin >> a >> b;
change(a, b); //函数调用
return 0;
}
代码二(如下):宏定义(用#define定义的符号常量和用const声明的常变量)
#include <iostream>
using namespace std;
#define SWAP(a, b,t) (t=a,a=b,b=t)
int main() {
int x, y, t;
cin >> x >> y;
SWAP(x, y,t);
cout << x << " " << y;
return 0;
}
问题点:
①:实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回给实参。在调用函数时,编译系统临时给形参分配存储单元。注意:实参单元与形参单元是不同的单元。
调用结束后,形参单元被释放,实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。
②:函数的返回值是通过函数中的return语句获得的。return语句将被调用函数中的一个确定值带回主调函数中去。
③:一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。
④:return语句后面的括号可以要,也可以不要。如“return z;”与“return (z);”等价。return后面的值可以是一个表达式。例如return(x>y?x:y);
⑤:函数调用有三种方式:
1)函数语句
把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。如:change();
2)函数表达式
函数出现在一个表达式中,这时要求函数带回一个确定的值以参加表达式的运算。如:c=2*max(a,b);
3)函数参数
函数调用作为一个函数的实参。如m=max(a,sqrt(b));
⑥:符号常量#define只是用一个符号代替一个字符串,在预编译时把所有符号常量替换成所指定的字符串。