为什么 x = 1, y = 2 ?
原因在于实参与形参没有任何关系,在这个地方确实是以 x 与 y 作为实参来调用swap了,而真实发生的事情是 ,x作为初始值用于初始化a ,也就是说,这次调用a被初始化为1了,然后y作为初始值用于初始化b,也就是说这次调用b的值为2了,之后x 与 y 的调用就与这次调用没有任何关系了,在这个函数的内部,a和b 发生了交换,交换完之后这个函数就返回了,既然函数返回,也就意味着a和b 就被销毁了,所以接着向下执行,从swap返回,所以接着向下执行x 与 y 还是 1 与 2
swap 里面的 a 和 b 针对的是swap 的a和b,与外界的a和b没有关系
函数中改变的是形参的值
宏是函数的替身,绝大数的情况下应该是考虑函数而不是宏
宏也又三部分组成
代码片段所对应的名字以及参数 需要封装的代码片段
#include <stdio.h>
#define ADD(a, b) a + b //只有看到ADD 才知道是宏的使用,而不是函数
int main()
{
int x = 1;
int y = 2;
printf("x + y = %d\n", ADD(x,y)); //如何不看上面函数, 你能区分是函数调用还是宏的使用吗?
return 0;
}
宏仅仅是使用的时候像函数
在 c 语言里面并没有要求一条语句只能写在一行,C 语言里面是以一个分号 ; 作为一个语句的结束的
这里能够交换成功吗?
可以,因为 define 的执行方式是 复制粘贴替换
我们可以 define 一个真正意义上的常量, const所定义的只是一个只读变量,不是真正意义上的常量,如果想要一个真正意义上的常量