您的位置:首页 > 其它

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

2009-11-21 22:12 281 查看
最近用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后的值传到函数判断然后返回。

大家要多思考,多总结,多笔记,养成良好的习惯~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐