66问答网
所有问题
#define SQR(x) x*x 在执行a=++SQR(k+1)时输出结果怎么是9 (其中k=3) c语言中宏定义部分的内容
我想请教为什么最终结果会是9而不是8
举报该问题
推荐答案 2011-10-29
为避免出现歧义,C宏定义时必须把所有的变量及整个变量表达式都要分别用圆括号括起来,不然当变量是表达式时展开时就达不到你想要的结果。原因是你没有用括号,展开时把++SQR(k+1)扩展成了++k+1*k+1了。你看,它就等于4+1x4+1=9了……像你这里这样定义就没有问题了:
#define SQR(x) ((x)*(x))
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://66.wendadaohang.com/zd/pps2x29p9.html
其他回答
第1个回答 推荐于2018-04-07
a=++SQR(k+1) = ++k+1*k+1 = 4+4+1=9
追问
谢谢你
追答
为何不采纳?
本回答被提问者和网友采纳
第2个回答 2011-10-29
还是宏展开的问题,改一下你的宏定义:
#define SQR(x) ((x)*(x))
相似回答
c语言一
题
答:
根据
#define
SQR(x)
x*x
,所以展开如下:
++SQR(k+1)=++
k+1*k+1 由于
k=3
,并且
++k是
先进行++处理,后代入运算的,所以:++k+1*k+1 =4+1*4+1 =9 注意:宏替换只要原样带入表达式就可以了,不要认为的主观加括号
简单的
C语言
题目
答:
答案是D
define
SQR(x)
x*x
main(){ int a,
k=3
;
a=++SQR(k+1)
;printf("%d\n",a);} 运行
结果是
:9
C语言
问题请教?
答:
SQR应该这样定义:
#define
SQR(x)(x)*(x
)若按照你先前的定义,在编译之前
SQR(k+1)
会被展开为:
a=++k
+1*k+1 k首先自增变成4,这样a的结果就是9。这是一个很典型的错误,也是一个很隐蔽的错误。
c语言
预定义的题目
答:
因为
++k是
先增加后运算,后面的k也是4,不是3
C语言
...
答:
define
定义不是有缺陷 它只是起代替作用 讲
括号中
的东西代如,然后在安正常顺序计算
a=++k+1*k+1
++表示把
K+1
后代入计算 所以a=4+1*4+1=9
关于
SQR
的编程理解
答:
因为
SQR(x)
x*x
,当
K=3
时,SQR(K+1)=k+1*k+1,又因为是++SQR,所以变量K先自加一再进行运算,即
++SQR(k+1)=(
k+1)+1*(k+1)+1=4+4+11=9
大家正在搜
define f(x) x*x
define定义a的三次方
definex怎么读
definex是什么牌子
definex是什么衣服牌子
c语言定义max函数
int f(int x)
define max
suffer defeat
相关问题
执行下面的程序后,a的值是 #define SQR(X) X...
c语言SQR(X)
请问 #define sqr(x) x*x sqr(k+m)...
#define sqr(x) x*x main() {int...
#define JFT(x)x*x void main() ...
#define SQR (X) X*X main() {in...
请问 #define sqr(x) x*x K=2,M=1 ...
#include <stdio.h> #define SQR...