关于 C 中的 cast 和 ++ 运算符的奇怪事实 [关闭]

问题描述 投票:0回答:1

我正在学习 C,我发现

++
运算符可能具有更高的演员优先级,但这对我来说很奇怪!

这是我的代码:

#include <stdio.h>

#define SUFF 18
#define PROM 1
#define BOCC 0

int main(int argc, char* argv[])
{
    int v1, v2;
    float ris1, tmp;
    int ris2, ris3;

    scanf("%d", &v1);
    scanf("%d", &v2);

    if (v1 >= SUFF && v2 >= SUFF)
        ris3 = PROM;
    else
        ris3 = BOCC;

    ris1 = ((float)v1 + v2) / 2;

    tmp = ris1 - (int)ris1;

    if (tmp >= 0.5)
        ris2 = (int)ris1 + 1;
    else
        ris2 = (int)ris1;

    printf("%d %d\n", ris2, ris3);

    return 0;
}

我指的是这一行:

ris2 = (int)ris1 + 1;

输入:18 19 输出:19 1 正确!

如果我改成这样:

ris2 = (int)ris1++;

输出变为:18 1 不正确!

我期待两个代码的结果相同。

c casting operators operator-precedence
1个回答
0
投票

ris2 = (int)ris1++;
,(后增量 - 增量稍后发生)就像

ris2 = (int)ris1;
ris1++;

不像

ris2 = (int)ris1 + 1;
.


ris2 = (int)++ris1;
,(预增量)就像

ris1++;
ris2 = (int)ris1;

就像

ris2 = (int)ris1 + 1;
期望
ris1
也递增。


(int)
演员表与问题无关。

© www.soinside.com 2019 - 2024. All rights reserved.