《程序员面试宝典》精华 编程语言部分

《程序员面试宝典》精华 编程语言部分

  • 正所谓取其精华,去其糟粕。本文谨记录下《程序员面试宝典》一些关键的知识点、易错点,对于一些虽然重要但书中没有解释清楚的地方不做记录。当然这里的糟粕只是指不那么重要,或者比较简单,并不是说书写的不好。希望以后回顾时无需再看此书,只看保留在文中的精华即可。
  • 文中有少许bug,亦摘录在此。
  • 本文专注编程语言部分,包括第五章到第九章的内容

第五章 语言细节

  • 5.1 y = z = 5,等号先计算右边,返回值是赋值后的左边的变量值
  • 5.1 printf函数中的表达式从右向左压栈,应该先计算右方的值
  • 5.4 float型1.0f在内存中表示为:0x3f 80 00 00
  • 5.5 出现int常数的表达式中的变量通常都要提升至int型
  • 5.5 赋值运算符默认从右向左结合,也就是先计算右方的值
  • 5.5 (x&y) + ((x^y)>>1)效果是取二者的平均数
  • 5.6 不用判断和switch语句求a、b中的较大的一个:((a + b) + abs(a - b)) / 2
  • 5.7 extern "C"的用法:函数声明前添加,解决C/C++编译器的名字包装的不同问题

第六章 预处理、const和sizeof

  • 6.1 求结构体中某成员的偏移量:#define FIND(struc, e) (size_t)&(((struc *)0)->e)
  • 6.2 C语言中,const n = 10; char carray[n]是错误的,因为C编译器不能把const看成编译期的常量。但实验得出是正确的,bug
  • 6.3 C++中给类成员变量添加mutable修饰符,就可以使用const函数修改
  • 6.3 结构体对齐原则:结构体长度一定是最长数据元素整数倍,但如果大于处理器位数,则以处理器位数为对齐单位。CPU数据对齐原则是数据的内存地址必须是该数据长度的整数倍,以提高运行速度
  • 6.3 sizeof(string) == 4
  • 6.3 空类以及(多重)继承的空类大小都为1,但虚继承的类含有虚表指针,大小为4

第七章 指针与引用

  • 7.1 指针与引用的区别
    • 引用总是非空的,指针可能为空,使用时要小心测试
    • 引用不可以指向另一个对象,但指针可以更改
  • 7.1 int *p; *p = 0;是错误的,指针p并未指向某个实际的地址
  • 7.2 char a[] = "a"数组存放中栈中,函数返回即消失,char *a = "a"数组存放于全局只读数据段
  • 7.2 若类B继承类A,两者皆有成员变量,A中有f方法,则B b; b.f()调用的是A中的f,f使用的变量也为A中的变量
  • 7.3 指向const的指针应该是const int *,bug
  • 7.3 int ( *(*f)(int, int) )(int)定义了一个函数指针,接收两个int参数,返回值为一个函数指针
  • 7.4 指向整型数组的指针声明为:int (*p) [],指向整型的指针数组声明为:int *p[],函数指针的数组的声明:int (*p[10])(int)
  • 7.5 悬浮指针指的是delete之后的指针,应该让指针等于0,使得后续程序使用此悬浮指针出错是可控的。比如第二次delete
  • 7.5 new/delete与malloc/free的区别
    • 前者是运算符,后者是函数
    • 前者除了后者申请与释放动态内存的工作之外,对于非内置类型,还完成类初始化与析构操作
  • 7.6 autoptr中拷贝时会尝试只保留一份指针,因此不适合放在容器中

第九章 STL模板与容器

  • 9.1 如果没有重载拷贝构造函数为深拷贝,而又包含指针,那么调用拷贝构造函数时会复制指针,造成同一个指针 delete多次

  
  

转载请注明作者:Focustc,博客地址为 http://blog.csdn.net/caozhk,原文链接为 点击打开

  
  

你可能感兴趣的:(C&C++)