10602
题目
编写四个函数,近似模拟 ++x、x++、--x、x-- 对 int 对象的效果。
要求:
- 通过指针修改调用方对象;
- 前缀形式返回修改后的值;
- 后缀形式返回修改前的值;
- 说明为什么这些函数只是近似模拟,而不是和运算符完全等价。
答案
c
#include <stdio.h>
int pre_inc(int* p) {
return ++*p;
}
int post_inc(int* p) {
int old = *p;
++*p;
return old;
}
int pre_dec(int* p) {
return --*p;
}
int post_dec(int* p) {
int old = *p;
--*p;
return old;
}
int main(void) {
int x = 3;
printf("%d %d\n", pre_inc(&x), x);
printf("%d %d\n", post_inc(&x), x);
printf("%d %d\n", pre_dec(&x), x);
printf("%d %d\n", post_dec(&x), x);
return 0;
}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
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
这些函数只是近似模拟:运算符直接作用于操作数,有标准规定的求值规则;函数调用还涉及实参求值、指针传递和函数调用本身。因此它们不能在所有上下文中替代自增、自减运算符。