以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
#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
都是直接替换,不要自己加一些没有的字符。
宏 要加括号 不然有风险
变量 要初始化
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))
y = (x=a+b),(b+c); =号比逗号的优先级高
这个语句是这样的:
(y = (x=a+b)),(b+c);
如果写成这样,就和你预想的一样了,y就是b+c了:
y = ((x=a+b),(b+c));
#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) ) 只是加了括号"()"而已
这样也可以达到目的.
这是一个关于宏的,一定要注意,宏只是替换!
M(a+b,b+c,c+a)等价于:a+b*b+c+c+a=2a+2c+b*b=12
而不是(a+b)*(b+c)+c+a
#define会代入
c=f(a)/f(b);
变成c=a*a/b*b;
即6 * 6 / 2 * 2
36 / 2 * 2
18 * 2
36
MAX(a+b,b+c,c+a)宏定义转换运算如下
a+b*(b+c)+c+a 1+2*(2+3)+3+1=15
输出结果15
*(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指向的数据操作
#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://m.mcbbbk.com/newsview330036.html
上一篇: 体育运动是如何影响青少年生理与心 |
下一篇: 养宠物的孩子心理更健康 |