1203081549 发表于 2023-4-8 20:13:48

自增自减

void main()
       {
         int c=10,h=20;
         printf("%d %d %d ",++c,h++,c--);
       }
为什么结果是 10 20 11
第一个c不应该是自增完再输出吗

sfqxx 发表于 2023-4-8 20:15:53

本帖最后由 sfqxx 于 2023-4-8 20:17 编辑

根据c语言中的运算符优先级规则,前缀自增(++c)和后缀自增(h++)优先级高于后缀自减(c--),因此在执行语句printf("%d %d %d ",++c,h++,c--)时,会先执行++c和h++操作,再执行c--操作。

所以,执行过程如下:

1. ++c:将变量c的值加1,结果为11;
2. h++:将变量h的值输出,并将其值加1,结果为20;
3. c--:将变量c的值减1,结果为10;

最终输出的结果是 10 20 11。
有用请设置最佳答案

isdkz 发表于 2023-4-8 20:17:43

代码中的printf函数调用似乎有误,因为它会导致不确定的结果。

在printf函数中,参数求值顺序是未定义的,因此递增和递减运算符可能以不同顺序执行。这可能是为什么输出结果与预期不符。

为了获得更可预测的结果,建议将自增和自减操作与printf分开。这是修改后的代码:

#include <stdio.h>

void main()
{
    int c=10, h=20;
   
    c = ++c;
    printf("%d ", c);
   
    printf("%d ", h);
    h = h++;
   
    c = c--;
    printf("%d", c);
}

这样修改后,输出结果将是:11 20 11,这应该是预期的输出。这是因为:


[*]++c是前置递增,c首先递增到11,然后输出11。
[*]h++是后置递增,h的值在输出(仍然是20)之后递增,但输出时保持不变。
[*]c--是后置递减,c的值在输出(仍然是11)之后递减,但输出时保持不变。

sfqxx 发表于 2023-4-8 20:21:51

isdkz 发表于 2023-4-8 20:17
代码中的printf函数调用似乎有误,因为它会导致不确定的结果。

在printf函数中,参数求值顺序是未定义的 ...

别跟我抢了{:10_269:}

1203081549 发表于 2023-4-8 20:26:28

sfqxx 发表于 2023-4-8 20:15
根据c语言中的运算符优先级规则,前缀自增(++c)和后缀自增(h++)优先级高于后缀自减(c--),因此在执行 ...

您的意思是执行完最后一个自减之后才开始输出是吗

sfqxx 发表于 2023-4-8 20:46:12

1203081549 发表于 2023-4-8 20:26
您的意思是执行完最后一个自减之后才开始输出是吗

如果您在编程语言中使用自减操作,那么在执行最后一个自减操作之后,程序会输出该变量的值。这是因为自减操作会先减去变量的值,然后将新的值赋回给该变量,所以输出的值是减去1之前的值。

sfqxx 发表于 2023-4-10 07:17:42

请设置最佳答案
页: [1]
查看完整版本: 自增自减