我有以下C程序,我不理解以下程序的输出。
#include <stdio.h>
int main()
{
int a,b, *p1, *p2, x,y,z;
a=12;
b=4;
p1=&a;
p2=&b;
x=*p1 * *p2-6;
y=4* - *p2 / *p1+10;
printf("y=%d", y);
return 0;
}
该程序的输出为9.但 4 * 的含义是什么?
答案 0 :(得分:4)
此行中的间距可能会引起混淆:
y=4* - *p2 / *p1+10;
这相当于:
y = 4 * (-*p2) / *p1 + 10;
但间距使其看起来像减法。
答案 1 :(得分:4)
4 *
的含义是什么?
*
有乘法运算符。该提取中只显示一个操作数4
。完全乘法是:
4* - *p2
更明确地写为
4 * -(*p2)
写出表达式,替换值。我们可以忽略x
,因为它没有被使用。这让我们离开了:
y= 4* - *p2 / *p1+10;
而*p2
是b
,4
。而*p1
是a
,即12。所以表达式为:
y = 4 * -4 / 12 + 10;
评估为:
y = ((4 * -4) / 12) + 10;
哪个是
y = (-16 / 12) + 10;
哪个是
y = -1 + 10;
答案 2 :(得分:2)
代码
4* - *p2
装置
4 * (-*p2)
所以*在这里意味着简单的乘法。
答案 3 :(得分:2)
熟悉C优先级和关联表:
将对此语句进行评估(为清晰起见,添加了括号):
x = ((*p1) * (*p2)) - 6;
x = ((12) * (4)) - 6
x = (48) - 6
x = 42
y = (4 * (-(*p2)) / (*p1)) + 10;
y = (4 * (-4) / (12)) + 10
y = (-16 / 12) + 10
y = -1 + 10
y = 9