关于C语言中的自加运算符问题
2012-11-12 13:38
232 查看
这是一道笔试题,问的是输出结果是什么?:
#include <stdio.h>
#define pro(x) (x*x)
int main()
{
int x = 3, k, j;
j = pro(x++);
k = pro(++x);
printf("j = %d, k = %d, x = %d\n", j, k, x);
return 0;
}
答案是:9 49 7
可能有些朋友对于49这个结果有些意外,但确实就是,不信你可以在gcc或者vc++下编译看看。
下面我们来分析下原理:
整个表达式的运算过程是:
1、进行所有的前缀单目运算
2、取所有单目运算对象的当前值作为表达式的计算结果
3、进行所有的后缀单目运算
依据第1点,我们知道,在运算pro(++x),程序是先运行了两次++x后再从X的地址上取出X值来进行x*x运算,所以得到的结果就是49.
#include <stdio.h>
#define pro(x) (x*x)
int main()
{
int x = 3, k, j;
j = pro(x++);
k = pro(++x);
printf("j = %d, k = %d, x = %d\n", j, k, x);
return 0;
}
答案是:9 49 7
可能有些朋友对于49这个结果有些意外,但确实就是,不信你可以在gcc或者vc++下编译看看。
下面我们来分析下原理:
整个表达式的运算过程是:
1、进行所有的前缀单目运算
2、取所有单目运算对象的当前值作为表达式的计算结果
3、进行所有的后缀单目运算
依据第1点,我们知道,在运算pro(++x),程序是先运行了两次++x后再从X的地址上取出X值来进行x*x运算,所以得到的结果就是49.
相关文章推荐
- 关于php运算符优先级问题(php不完全遵守运算符优先级)
- 关于文件输出空字符问题(C语言)
- C语言关于位<<和>>运算符
- C语言中关于malloc(0)问题
- C语言关于结构体赋值的问题
- 关于C语言编译的问题
- 关于C语言中输入字符的问题
- C语言:关于计算字符串中空格数的问题
- c语言数据类型和运算符、表达式的十个问题
- 关于c语言中的运算符及注意事项
- 关于C语言中的结构体对齐问题
- c语言中关于声明和左值右值问题
- C语言中关于malloc(0)问题
- 关于C语言中日期 计算问题
- 一个关于去除数组重复元素的问题(C语言实现)
- 关于C语言中参数的传值问题
- C语言中关于字符串的输入问题
- 关于C语言宏展开的一个问题
- 关于重载流插入运算符和流提取运算符的问题
- 关于C语言 内存对齐的问题