本文主要是介绍#define的小trick,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
请看下面这段代码:
#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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!