chenlifeng 发表于 2022-3-15 14:29:45

c语言关于自增运算符的问题

#include<stdio.h>
int main() {
        int a = 3;
        printf("++a = %d, a++ = %d\n",++a,a++);
        return 0;
}

运行结果:
++a = 5, a++ = 3

感觉好奇怪啊,不能理解
{:9_241:}

jhq999 发表于 2022-3-15 14:50:52

本帖最后由 jhq999 于 2022-3-15 14:54 编辑

printf("++a = %d,a=%d, a++ = %步骤d\n",++a,a,a++);//会不会更懵B
++a = 5,a=5, a++ = 3
不要纠结,遇到直接分解成自己需要的步骤

wp231957 发表于 2022-3-15 14:51:24

printf比较特殊,它是自右至左压栈
所以先看a++那么表达式值为3    此时a等于4
再看++a   此时表达式值为5

chenlifeng 发表于 2022-3-15 14:53:38

wp231957 发表于 2022-3-15 14:51
printf比较特殊,它是自右至左压栈
所以先看a++那么表达式值为3    此时a等于4
再看++a   此时表达式值 ...

哇哦,我明白了

chenlifeng 发表于 2022-3-15 14:54:09

jhq999 发表于 2022-3-15 14:50


啊这

傻眼貓咪 发表于 2022-3-15 15:03:45

首先你可以试试理解:#include <stdio.h>

int main() {
        int a, b, c;
        a = 3;
        b = a++;
        c = ++a;
        printf("%d %d %d", a, b, c);
        return 0;
}输出结果:5 3 5

jhq999 发表于 2022-3-15 15:25:55

本帖最后由 jhq999 于 2022-3-15 15:29 编辑

a=3;
b=a;//遇到后缀重新申请内存相当于变量b,然后把a赋值给b,前缀和本身不变
a+=1;
a+=1;
printf("%d %d %d", a,a,b);//printf("++a = %d,a=%d, a++ = %步骤d\n",++a,a,a++);


a=3;
b=a;
a+=1;
c=a;
a+=1;
a+=1;
printf("++a = %d,a++=%d, a++ = %d\n",a,c,b);//printf("++a = %d,a++=%d, a++ = %d\n",++a,a++,a++);结果6 4 3
感觉没必要纠结这玩意,少出BUG最好步骤分解
页: [1]
查看完整版本: c语言关于自增运算符的问题