注册 登录
编程论坛 C语言论坛

a++,++a

南简 发布于 2020-07-25 16:14, 1990 次点击
#include<stdio.h>
int main()
{
    int a=100;
    printf("%d\n",a++);
    printf("%d\n",++a);
    return 0;
}
为什么结果是100和102?
6 回复
#2
ycq008_happy2020-07-25 16:36
a++:先处理完,a值再加,输出为100,然后a值变为101

++a:a先加,(前面a++,a值已经变为101)变为102,然后再输出处理,结果变为102
#3
吹水佬2020-07-25 16:49
    printf("%d\n",a++);
    printf("%d\n",++a);
相当:
    printf("%d\n",a);
    a++;
    ++a;
    printf("%d\n",a);
#4
kr02020-07-25 19:39
第一 a++先使用a的值 即a为100,输出100,然后执行后缀++ 使a为101
第二 ++a先执行前缀++, 使上一次的a(101)变为 102,输出102
#5
rjsp2020-07-25 21:41
没有规定什么先和后。
问题很简单,你没区分“表达式评估”和“副作用”。

int a=100;
a++ 这个表达式的评估值是100,a的副作用是值变为101;

int a=100;
++a 这个表达式的评估值是101,a的副作用是值变为101;

再举个显而易见的例子
(a=1) + (b=2) 这个表达式评估后,a等于1,b等于2,但表达式本身的值是3
#6
rjsp2020-07-26 12:09
详见:
https://zh.
#7
南简2020-07-27 13:49
明白了,谢谢大佬们🙏
1