概述
请看下面这段代码:
#include<stdio.h>
#define SQR(x) x*x
int main()
{
int a;
int k=3;
a=++SQR(k+1);
printf("%d",a);
}
大家觉得结果应该是多少呢?
如果不用编辑器编译运行的话,我相信大家会给出各种不同的答案。
最常见的错误就是先算k+1=4,然后就是4*4+1=17,这个结果看似很对,但却忽略了一个地方,就是#define只做替换不做运算。所以不能先算括号里的k+1,。
那么现在这种答案被否定后,又出现了另外一种答案:
3+1*3+1=7,最后++再加1,所以结果等于8,这个看似很合理,而且离正确的答案已经非常地接近,只差了一步就对了,那么它的问题又出现在哪呢?
其实它这样算还是没有理解#define只做替换不做运算,人为地在++后面给它加了括号,就相当于++(k+1*k+1)。
正确的理解应该是这样的:
++k+1*k+1,这样看的话就对了,由于++运算符的优先级高于+,所以先算++k,k就等于4了,后面的k这时也是4,所以结果就是4+4+1=9。
这是个比较经典的题目,大家能把这题理解的话对于#define应该是没问题了。
最后
以上就是冷静苗条为你收集整理的#define的小trick的全部内容,希望文章能够帮你解决#define的小trick所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复