我只是经历了一些在访谈中经常被问到的代码。我提出了一些问题,如果有人可以帮我解决这个问题?
我现在对此感到困惑,
#include <stdio.h>
#include <conio.h>
#define square(x) x*x
main()
{
int i, j;
i = 4/square(4);
j = 64/square(4);
printf("\n %d", i);
printf("\n %d", j);
printf("\n %d", square(4));
getch();
}
输出是:
4
64
16
我想知道,为什么square(4)
当我分开它时返回1?我的意思是,当我分割它时如何得到值4和64,但是当直接使用时我得到16 !!
发布于 2019-06-26 12:50:45
编写时i=4/square(4)
,预处理器会将其扩展为i = 4 / 4 * 4
。
因为C组操作从左到右,编译器将其解释为i = (4 / 4) * 4
,相当于1 * 4
。
你需要添加括号,如下所示:
#define square(x) ((x)*(x))
这样,i=4/square(4)
变成了i = 4 / ((4) * (4))
。如果你写的话你
需要额外的括号,否则会变成,被评估为,或。xsquare(1 + 1)1 + 1 * 1 + 11 + (1 * 1) + 13
发布于 2019-06-26 13:51:01
i=4/square(4);
扩展到
i=4/4*4;
相当于
i=(4/4)*4;
https://stackoverflow.com/questions/-100007057
复制相似问题