hyqd.net
当前位置:首页 >> 在C语言中为什么执行过 #DEFinE N 2 #DEFinE M N+1 #DEFinE NUM ... >>

在C语言中为什么执行过 #DEFinE N 2 #DEFinE M N+1 #DEFinE NUM ...

#difine 只是宏定义中的单纯的替换 NUM = (M+1)*M/2 = (N + 1 +1)*N + 1/2 用N=2去运算 就是8了.

define相当于替换吧 n为4 m为n+2,就是4+2 num为2*m+1,就是2*n+2+1 相当于2*4+2+1 计算结果是11

声明一个公共常量N=2,把N看成常数2就可以

选B,6次 因为NUM最终计算结果为5,因为i的初值为0,所以循环了6次

这个东西,不能事先计算,要一层层展开才行. num 展开 2*m+1 ,m展开为n+1,注意不要加括号 2* n+1 +1 n展开为2 2*2 +1+1 结果为6

NUM (M+1)*M/2=(2+1+1)*2+1/2=8 #define M N+1 这个地方没有括号,所以原样代入表达式.

#define N 2 #define M N+1 #define NUM (M+1)*M/2 main() { int i; printf("%d\n",NUM); } N=2 M=N+1 也就是说 M=2+1这个表达式 注意没有括号 NUM=( 2+1 +1 ) * 2 + 1 / 2 而你 输出的NUM是一个整数 NUM=(4)*2 + 0 = 8

#define是用一段文字代替另一段文字 编译的时候N是“2”,M是“N+1”,所以M最后为“2+1” NUM是“2*M+1”,把其中的M换成“2+1”可以得到 NUM为“2*2+1+1”为6,系统不会给M自动加括号 非要用宏来实现的话只能在每次使用N,M和NUM的时候手动加上括号.一般用常量变量,这样写 const int N=2; const int M=N+1; const int NUM=2*M+1 main() {int i; for int i; for(i=1;i

问题出现在这条命令#define M N+1 上, M=2+1=3;NUM=2*M+1=2*2+1+1=6;但如果你把命令行改为#define M (N+1)的话,结果就变为NUM=2*(M+1)=2*(2+1)+1=7.

NUM = 2*2+1+1宏只是简单的替代,而并不做运算优先的判断.就是说N = 2;M = 2 + 1;NUM = 2 * (2 + 1) + 1;//括号中的代表N ,但是括号并不起作用所有NUM = 6如果想让括号起作用#define M (N+1)这样NUM 的结果就不同了NUM = 7

相关文档
4405.net | krfs.net | 5689.net | xcxd.net | jinxiaoque.net | 网站首页 | 网站地图
All rights reserved Powered by www.hyqd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com