#define add(x) x*x main(){int a=4,b=6,c=7,d=add(a+b)*c;printf(“d=%d ”, d);}怎样分析?
以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
#define add(x) x*x main(){int a=4,b=6,c=7,d=add(a+b)*c;printf("d=%dn", d);}怎样分析?
#define宏是直接替换,不会先给你计算的
add(a+b) = a+b*a+b
d = add(a+b)*c = a+b*a+b*c =4+4*6+6*7 = 4+24+42 = 70
都是直接替换,不要自己加一些没有的字符。
#define f(x) x*x main() {int a=6,b=2,c; C=f(a)?f(b); printf("%dn",c);}
宏 要加括号 不然有风险
变量 要初始化
c是区分大小写的
#define f(x) x*x main() { int a=6,b=2,c; c=f(a)/f(b); printf("%dn",c);
完整程序是:
#include "stdio.h"
#define f(x) x*x
int main()
{
int a=6,b=2,c;
c=f(a)/f(b);
printf("%dn",c);
return 0;
}
c=f(a)/f(b); 实际上在预编译时把f(x)直接用x*x替换了,c=a*a/b*b,c=6*6/2*2=36,是不会加括号的,要自己加括号#define f(x) ((x)*(x))
#include <stdio.h> void main() { int a=2,b=4,c=6,x,y; y = (x=a+b),(b+c); printf("y=%dn,x=%dn",y,x)
y = (x=a+b),(b+c); =号比逗号的优先级高
这个语句是这样的:
(y = (x=a+b)),(b+c);
如果写成这样,就和你预想的一样了,y就是b+c了:
y = ((x=a+b),(b+c));
#define MAX(x,y) (x)>(y)?(x):(y) main(){int a=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf("%dn",t);}
#include"stdio.h"
#define MAX(x,y) (x)>(y)?(x):(y)
main()
{int a=5,b=2,c=3,d=3,t;
int tem=MAX(a+b,c+d);
t=tem*10;
printf("%dn",t);
}
错误原因:
7>6 ? 7:6*10 结果为 7
你按我上面的修改就行了. 其实你 为什么要用宏,直接把宏变为函数也行的.
或者 你这样定义宏
#define MAX(x,y) ((x)>(y)?(x):(y) ) 只是加了括号"()"而已
这样也可以达到目的.
# define M(x,y,z) x*y+z main() { int a=1,b=2,c=3; printf("%dn",M(a+b,b+c,c+a)); }
这是一个关于宏的,一定要注意,宏只是替换!
M(a+b,b+c,c+a)等价于:a+b*b+c+c+a=2a+2c+b*b=12
而不是(a+b)*(b+c)+c+a
#include <stdio.h> #define f(x) x*x main() {int a=6,b=2,c; c=f(a)/f(b); printf("%dn",c); }
#define会代入
c=f(a)/f(b);
变成c=a*a/b*b;
即6 * 6 / 2 * 2
36 / 2 * 2
18 * 2
36
#define MAX(x,y,z) x*(y)+z int main() {int a=1,b=2,c=3; printf("%dn",MAX(a+b,b+c,c+a)的输出
MAX(a+b,b+c,c+a)宏定义转换运算如下
a+b*(b+c)+c+a 1+2*(2+3)+3+1=15
输出结果15
{printf("%d,%d,%dn",++*X,++*y,*(z++));} main() {int a=10,b=40,c=20; prt(&a,&b,&c);Prt(&a,&b,&c);
*(z++) 的问题吧, C的话, 这里是你不是直接对 z 作操作,即使你用的是&c 来传递, *(z) 这样的话似乎就是得到值等于z 的一个prt 函数内的局部变量zTmp了 ,而* 作用的是这个prt函数的zTmp,所以 z没有改变
应该还是楼上的正确
&c 得到 C的地址,在ptr中就是x,y,z
* 这个操作权比++ 大, ++*x 就是 通过地址x 解地址引用,对地址x 的数据进行 ++ 操作
所以 ++*x 会自加1
而 *(z++)等价于 *z;z++; 的话,则是先取出 z 里的数据就是 20 ,然后地址z 再+4 指向下一个数据,不过并没有对z 对应的数据进行了++操作。所以不会自加1
++*x 与 *(z++) 的区别是 x 的++ 是对x 地址指向的数据操作的,而z 的++ 只是对z操作,而没有对z指向的数据操作
int a=5;int b=7; void main() { int a=4,b=5,c; c=plus(a,b); printf("A+B=%dn"
#include<stdio.h>int a=5;int b=7;void main(){ int a=4,b=5,c;c=plus(a,b); 使用局部变量a和b(4和5)printf("A+B=%dn",c);}plus(int x,int y){int z;z=x+y;return(z); }运行后会输出:A+B=9
相关知识
#define add(x) x*x main(){int a=4,b=6,c=7,d=add(a+b)*c;printf(“d=%d ”, d);}怎样分析?
请用C语言编出一个简单的宠物管理系统。
习题4
设三个变量x=1,y=2,z=3,则表达式y+=z
若int类型数据占两个字节,则下列语句的输出是
c语言链表宠物4节点
程序运行后的输出结果是 int a,b,d=25; a=d/10%9; b=a&
void main() { int a=1,b=3,c=5; in
C语言入门04
这是6.11的练习哦~
网址: #define add(x) x*x main(){int a=4,b=6,c=7,d=add(a+b)*c;printf(“d=%d ”, d);}怎样分析? https://www.mcbbbk.com/newsview330036.html
上一篇: 体育运动是如何影响青少年生理与心 |
下一篇: 养宠物的孩子心理更健康 |
推荐分享

- 1养玉米蛇的危害 28654
- 2狗交配为什么会锁住?从狗狗生 6922
- 3我的狗老公李淑敏33——如何 6215
- 4豆柴犬为什么不建议养?可爱的 4597
- 5南京宠物粮食薄荷饼宠物食品包 4549
- 6中国境内禁养的十大鸟种,你知 4418
- 7湖南隆飞尔动物药业有限公司宠 4247
- 8自制狗狗辅食:棉花面纱犬的美 4241
- 9家养水獭多少钱一只正常 4194
- 10广州哪里卖宠物猫狗的选择性多 4102