不理解计算

时间:2014-01-22 14:02:50

标签: c

我有以下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 * 的含义是什么?

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;

*p2b4。而*p1a,即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优先级和关联表:

C Precedence and Associativity Table

将对此语句进行评估(为清晰起见,添加了括号):

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