您的位置:首页 > 职场人生

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

2014-08-06 12:13 323 查看


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

正所谓取其精华,去其糟粕。本文谨记录下《程序员面试宝典》一些关键的知识点、易错点,对于一些虽然重要但书中没有解释清楚的地方不做记录。当然这里的糟粕只是指不那么重要,或者比较简单,并不是说书写的不好。希望以后回顾时无需再看此书,只看保留在文中的精华即可。
文中有少许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
是错误的,因为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与mall
4000
oc/free的区别
前者是运算符,后者是函数
前者除了后者申请与释放动态内存的工作之外,对于非内置类型,还完成类初始化与析构操作

7.6 autoptr中拷贝时会尝试只保留一份指针,因此不适合放在容器中


第九章 STL模板与容器

9.1 如果没有重载拷贝构造函数为深拷贝,而又包含指针,那么调用拷贝构造函数时会复制指针,造成同一个指针 delete多次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: