#define的总结与比较~~替换原则

 
最近用define的时候有时候会用错,这里我再提一下define...

可能有些人还不清楚define也就是宏定义 。概念东西自己百度下吧
我讲讲用法
#define size 100
size 就相当于了100  这个和变量不同 size不是变量而是常数相当于
数组定义 int a[size];  这里可以写上size 为什么呢?  不是定义时候不能是变量吗?

嘿,刚才不是已经说了吗? size不是变量嘛,会上去看看,你就知道了。

现在主要讲的不是define的这个问题是表达式替换的问题。要深刻理解  #define size 100
int main()
{
    int a[size];
}
这个程序里运行时候  是把size 用100来替换了
不像变量 是放到一个存储空间里  所以说宏定义节省一定空间。
----------
进入正题了,我们写一个求一个数的绝对值一般都这样写:
int abs(int x)
{
    if(x<0)
        return -x;
    else
       return x;
}
函数写法。
那么我们怎么用define实现同样的目的呢?
#define abs(x) x<0?-x:x   (?:三元运算符这个 知道吧,不知道翻书)

记住宏定义是替换。
#include
#define abs(x) x<0?-x:x
int main()
{

int a=-5,b=-9,c;
c=a+b;
printf("%d/n",abs(c));
return 0;
}
看这个程序运行结果是多少?
是14吧。嗯对没错。
---
#include
int abs(int x)
{
    if(x<0)
        return -x;
    else
       return x;
}

int main()
{

int a=-5,b=-9,c;
c=a+b;
printf("%d/n",abs(c));
return 0;
}
答案也是14  效果一样的两个。



但是,,,,大家看好:
#include
#define abs(x) x<0?-x:x
int main()
{

int a=-5,b=-9,c;
/*c=a+b;*/ printf("%d/n",abs(a+b));
return 0;
}
这会答案是14??  不是绝对不是 那是多少??先不说 我们来分析下。。。。。

#include
#define abs(x) x<0?-x:x
int main()
{

int a=-5,b=-9,c;

printf("%d/n",abs(a+b));
return 0;
}

define替换,记住这个去分析。x被替换成a+b 然后就是a+b<0?-a+b:a+b
-5+-9<0?--5+-9:-5+-9
意思是说-5加-9小于0就--5加-9   那么答案是-4   明白了吧


;;;;

#include
int abs(int x)
{
    if(x<0)
        return -x;
    else
       return x;
}

int main()
{

int a=-5,b=-9,c;
/*c=a+b;*/
printf("%d/n",abs(a+b));
return 0;
}
这个函数写的答案呢?当然还是14喽 ,为什么 因为他不是替换形式的  把a+b后的值传到函数判断然后返回。

大家要多思考,多总结,多笔记,养成良好的习惯~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

helihui123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值