一道表达式的经典试题
2012-09-09 11:47
399 查看
写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C 错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11。
------------------------------------------------------------------------
自己的实验:
int main()
{
int a = 4;
(++a) += (a++);
int b = 4;
(++b) = (++b) + (b++);
printf("a = %d, b = %d/n", a, b);
return 0;
}
运行结果:
a = 11, b = 13。
根据以上结果(个人猜想):
编译器对表达式进行了两遍处理:
1.第一次:从左到右,进行出现的++运算。
2.第二次:从右到左,进行表达式的计算。
原创:http://blog.163.com/wupengzhi2005@126/blog/static/17101002201082965021807/
// sizeof(a=0)
#include <stdio.h>
int main()
{
int a = -1;
int b = sizeof(a=0);
// 程序实际输出-1
// 原因:
// sizeof在编译连接阶段进行处理,没有对a=0进行处理
printf("%d/n", a);
return 0;
}
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C 错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11。
------------------------------------------------------------------------
自己的实验:
int main()
{
int a = 4;
(++a) += (a++);
int b = 4;
(++b) = (++b) + (b++);
printf("a = %d, b = %d/n", a, b);
return 0;
}
运行结果:
a = 11, b = 13。
根据以上结果(个人猜想):
编译器对表达式进行了两遍处理:
1.第一次:从左到右,进行出现的++运算。
2.第二次:从右到左,进行表达式的计算。
原创:http://blog.163.com/wupengzhi2005@126/blog/static/17101002201082965021807/
// sizeof(a=0)
#include <stdio.h>
int main()
{
int a = -1;
int b = sizeof(a=0);
// 程序实际输出-1
// 原因:
// sizeof在编译连接阶段进行处理,没有对a=0进行处理
printf("%d/n", a);
return 0;
}
相关文章推荐
- 一道表达式的经典试题
- 一道经典试题的Python实现
- Linux经典试题
- 自己写的一道经典算法
- 关于索引的一道经典面试题
- Topcoder的一道经典算法题
- 关于论坛上的一道基础java试题的剖析
- leetcode 213. House Robber II 入室抢劫 抢劫问题 + 一道经典的DP动态规划问题
- 每天一道LeetCode-----对表达式添加括号并求值,返回所有可能的计算结果
- 经典正则表达式
- 经典JavaScript正则表达式实战(附pdf)
- Javascript经典正则表达式及教程
- 经典正则表达式
- 一道机试题,拿出来和大家分享一下,稍候贴出我做的代码(C#)
- C# 经典试题
- 一道经典面试题“I love china”的实现
- c经典面试试题<一>
- 一道经典的深搜题,不易写满分(素数环)
- 关于索引的一道经典面试题(体现效率所在)(转)
- 正则表达式 小结 经典解决方案[2]