C++高频面试题总结(一)
面试知识点总结,整理自微软、Intel、Autodesk等公司面试题,涵盖C/C++基础、内存管理、面向对象、算法数据结构等核心内容。1. 函数返回值(微软)int func(x) { int countx = 0; while(x) { countx ++; x = x(x-1); } return countx; }假定 `x = 9999`,返回值为 8。 思路:将 x 转化为二进制,统计其中 1 的个数。2. 什么是“引用”?使用引用要注意什么?引用是某个目标变量的“别名”,对引用的操作与对变量直接操作效果完全相同。注意事项:声明引用时必须初始化。引用一旦绑定,不能再作为其他变量的别名。引用本身不是数据类型,不占存储单元。不能建立数组的引用。3. 将“引用”作为函数参数的特点(1).传递引用与传递指针效果相同,形参成为实参的别名,操作直接作用于实参。(2).不产生实参副本,效率高,节省空间,避免拷贝构造函数调用。(3).相比指针,引用更清晰、易用,无需解引用操作。4. 什么时候使用“常引用”?需要既利用引用提高效率,又保护数据不被函数修改时,使用 `const` 引用。const 类型标识符 引用名 = 目标变量名;int a; const int ra = a; ra = 1; // 错误 a = 1; // 正确临时对象是 `const` 类型,不能传递给非 `const` 引用参数。应尽量将引用参数定义为 `const`。5. 将“引用”作为函数返回值的格式、好处与规则格式:`类型标识符 函数名(形参列表) { 函数体 }`好处:不产生返回值的副本。规则:1. 不能返回局部变量的引用。2. 不能返回函数内部 `new` 分配的内存的引用(易造成内存泄漏)。3. 可以返回类成员的引用,最好为 `const`。4. 流操作符 ``、`` 和赋值操作符 `=` 应返回引用以支持连续操作。5. 四则运算符 `+-*/` 不能返回引用(需返回对象)。6. “引用”与多态的关系引用是除指针外另一个可实现多态的手段:基类的引用可以指向派生类实例。class B : public A { ... }; B b; A ref = b;7. “引用”与指针的区别特性指针引用本质存储地址的变量目标变量的别名可读性较差,需解引用较好,直接操作初始化可不初始化(野指针危险)必须初始化重新绑定可以指向其他对象不可改变绑定8. 什么时候需要“引用”?(1).流操作符 ``、`` 的返回值(2).赋值操作符 `=` 的返回值(3).拷贝构造函数的参数(4).赋值操作符 `=` 的参数(5).其他推荐使用引用的场景9. 结构与联合的区别结构:所有成员都存在,各成员存放地址不同,赋值互不影响。联合:所有成员共用一块地址空间,同一时刻只存放一个成员,对一个成员赋值会覆盖其他成员。10. 联合相关题目输出题 (a)union { int i; char x[2]; } a; a.x[0] = 10; a.x[1] = 1; printf("%d", a.i);输出:`266`(内存布局 `0x010A`,低位低地址)题 (b)union { int