自加操作有两种,++ii++,很多新手都分不清这两个的区别,这里简单说一下这两个写法有什么不同。

普通解法

  ++ii++都是自加操作,两者的区别就在于前者是先自加再使用,后者是先使用再自加,下面用一段简短的代码来解释这个问题:

1
2
3
4
5
6
7
int main() {
int n = 0;
printf("%d\n", ++n);
printf("%d\n", n++);
printf("%d\n", n);
return 0;
}

  这段代码的输出结果是什么呢?显而易见,是1 1 2,接下来咱们来讲解为什么会是这个结果。

  • ++n 先将n的值加一并赋值给n,然后再传递给printf | 此时n=1,传值1
  • n++ 先保存n的副本,然后将n加一并赋值给n,然后再将副本传递给printf | 此时n=2,传值1
  • 传值2

  由此可见,上面的代码还能写成下面的样子,效果是一样的:

1
2
3
4
5
6
7
8
9
int main() {
int n = 0;
n += 1;
printf("%d ", n);
int temp = n;
n += 1;
printf("%d %d", temp, n);
return 0;
}

函数&指针解法

  没学过相关内容的小伙伴可以跳过这个部分

  接下来我们用函数的形式再次把上面的代码写一遍,为了节省篇幅就把函数写在上面了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* ++i */
int increaseAndReturn(int *value) {
*value += 1;
return *value;
}

/* i++ */
int returnAndIncrease(int *value) {
int temp = *value;
*value += 1;
return temp;
}

int main() {
int n = 0;
printf("%d %d %d", increaseAndReturn(&n);
printf("%d\n", returnAndIncrease(&n));
printf("%d\n", n)
return 0;
}