那个++, --的问题我就不写了……
第一题:运算符优先级问题
所有C语言教程上都有吧……《C程序设计语言》第二版中文版 P42页。
大致一些规律:
1、单目优先
2、带赋值符的特别低,=,+=, -=……==(等等)
3、位逻辑优先于代数逻辑,即&,^,| 先于 &&,||,另外,& > ^ > | > && > ||
4、比较运算高于逻辑运算
另外,type、sizeof是运算符哦,亲!
第二题:x = 2; y = 3;(x = 0) && (y = 5) ;print(x,y); ( y = 5) || (x = 1);print(x,y);
这题跟编译密切相关,虽说上了编译原理课,但是我连中间代码生成都还写不出来……这个短路代码嘛,就是:
&&和||在判断左侧操作数就能确定结果的情况下,就不再对右侧操作数求值。
第三题:左值?右值?这是个问题……
右值:是存储在某内存地址中的数据。
左值:存储数据的那块内存的地址。
简单的例子就是 x = x-5; 左边的就是左值(一般是变量),右边那完整的一块(变量、表达式、常量)就是一个右值。
另外,在C++中,左值可以引用到函数上。函数名就是一个地址,所以表示一个左值。
书中给的例子:int f(char) ,则表达式f就是一个在左值,该表达式引用到对应的函数:int (*p)(char); 那么 *p 也是一个左值。函数类型的左值是不可修改的。
当然,这个函数引用怎么引用过去的,没说哎……
第四题:sizeof和数据类型的长度
这个让我想起我做过的第一份笔试题,在我参加的俱乐部活动中,公司给我们出题考考我们,之后要做项目。最开始拿了一份JAVA/ANDROID,看题后,彻底,于是又拿了份LINUX/C的来。其中就有好几题sizeof。当时根本不知道,只能是乱填了。
字符型数据就是一个字节,8位,所以范围只到250+6;sizeof(char) = 1;
整型的话,现在电脑多半是32位的了,所以sizeof(int\float) = 4; long 应该也是 4。
指针保存的是一个内存地址,所以,长度和整型是一样的,=4,哪怕它指向的是一个很复杂的结构体,还是 = 4。
结构体的话,则是把里面的各项的sizeof求和啦!不对,还有内存对齐问题,引入位域的概念,例如:
struct bs { int a:8; int b:2; int c:6;};
不过,这本书弄得我有些晕了……不知道是不是他出错了。最起码,内存对齐这部分没看懂。
PS:原来下面的文章分类是可以不选的啊……不知道选和不选有什么区别。