C/C++面试必知:指针、引用与构造函数解析

需积分: 3 5 下载量 198 浏览量 更新于2024-09-09 1 收藏 178KB DOC 举报
"C++面试题集,涵盖指针与引用的区别、构造函数的特性、字符串内存管理、数组长度计算、指针位数以及struct与class的异同" 1、指针与引用的区别 指针是一个变量,它可以存储内存地址,可以为空或重新赋值指向其他对象。引用则是一种别名,一旦初始化后就永久绑定到一个对象,不能改变引用本身,也不能让它空悬。指针可以用作函数参数,可以被赋值和比较,而引用在定义时必须初始化且不能改变其引用的对象。 2、构造函数不能声明为虚函数 构造函数的主要职责是初始化对象,需要知道对象的确切类型。而虚函数是为了实现多态性,允许在运行时动态绑定。由于构造过程中对象类型已经确定,因此无需虚函数机制,虚函数主要应用于基类指针或引用调用派生类的重载方法。 3、字符串内存管理与比较 字符串字面量(如"abc")存储在程序的只读数据段,称为文字常量区,多个相同的字符串字面量可能共享同一内存。局部数组如str1和str2存储在栈上,每个都有独立的内存。const char类型的数组str3和str4也是栈上分配,不共享内存。而const char*类型的指针str5和str6,由于字符串字面量共享,它们的值相等。 4、数组长度的计算 在C/C++中,当数组作为函数参数传递时,退化为指针,sizeof运算符返回的是指针的大小,而不是数组的实际长度。因此,上述函数不能正确计算数组长度。正确的做法是将数组长度作为额外参数传递给函数。 5、指针的位数 在32位机器上,地址总线宽度为32位,这意味着指针占4个字节。因此,无论什么类型,包括void*,sizeof(p)的结果都是4。 6、C与C++中struct与class的区别 在C语言中,struct只能包含数据成员,没有成员函数。而在C++中,struct可以拥有成员函数,类似于class。主要差异在于默认访问修饰符:C++中class的成员默认为private,struct的成员默认为public。此外,class更常用于面向对象编程,struct则更多用于数据结构的定义。 这些面试问题涵盖了C++的基础知识,包括内存管理、类型系统、构造函数的性质以及面向对象编程的概念。理解和掌握这些知识点对于C++开发者来说至关重要。在面试中,能够流利地解释这些问题不仅能展示对语言的深入理解,也能体现问题解决和编程实践的能力。