面试指南 笔记(四) 运算符

来源:互联网 发布:601939大智慧赢数据 编辑:程序博客网 时间:2024/04/30 04:28

      那个++, --的问题我就不写了……

          第一题:运算符优先级问题抓狂

      所有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;};

        不过,这本书弄得我有些晕了……不知道是不是他出错了。最起码,内存对齐这部分没看懂。

原创粉丝点击