C语言之自增探讨

sum = ++i + ++i的处理结果在 不同的编程语言(如java,js)及不同的编译器中可能有差异,以下仅针对C语言!纯粹个人理解,仅供参考。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdio.h"
void main()
{
int i=1,sum;
/* i = i++; //i=2 先赋值,再运算
    i = ++i; //i=2 先运算,再赋值
*/
    printf("i=%d\n",i);

/*注意:
a=++i; 等效为:i=i+1;a=i;
a=i++; 等效为:a=i;i=i+1;
sum=a+b;
a,b各自的 返回值 与 i值 不相关!
*/

//sum = ++i + ++i;
//6【未验证!左++i先自增为2暂不返回,右++i由i=2继续自增为3(i=3)完成 b=i 并返回,同时左++i也 完成 a=i 返回3结束。两者相加为6】

//sum = i++ + ++i;
//4【左i++ 完成 a=i 先返回1结束,之后左i自增为2,右++i继续自增为3 完成 b=i 并返回3,结束,两者相加为4】

//sum = i++ + i++;
//2【左i++ 完成 a=i 先返回1结束,右i++ 完成 b=i 同时返回1结束,两者相加为2】

//sum = ++i + i++;
//4【左++i先自增为2(i=2)暂不返回,右i++ 完成 b=i 直接返回2,左 同时返回2,结束,两者相加为4】

/*
    sum = i++; //sum=1 ,i=2
    sum = ++i; //sum=2 ,i=2
*/
//printf("sum=%d\n,i=%d\n",sum,i);
}

要点:

  1. ++i是先运算,再赋值。i++是先赋值,再运算!
  2. 完成 赋值表达式 便 返回值,与 i值 不相关!
    1
    2
    3
    sum = i++; //sum=1 ,i=2
    sum = ++i; //sum=2 ,i=2
    printf("sum=%d\n,i=%d\n",sum,i);