C++面试知识点深度解析:指针、内存管理与数据结构

版权申诉
0 下载量 179 浏览量 更新于2024-07-18 收藏 71KB DOCX 举报
"这是一份综合性的C++面试问题文档,涵盖了从基础知识到高级概念的各种问题,包括指针与引用的对比、memcpy与strcpy的区别、new与malloc的使用差异、struct与class及union的特性,还有队列和栈的数据结构特点,以及指针在不同位宽系统中的内存占用和全局变量的引用方式。" 在C++编程中,指针和引用是两个重要的概念。指针是一个变量,它存储了另一个变量的内存地址,需要通过解引用操作(*)来访问指向的值。而引用则是一个已存在变量的别名,一旦在定义时初始化,就不可改变,并且始终绑定到同一个对象,无需解引用。引用不能为空,但指针可以为空。此外,指针本身需要内存空间存储其地址,而引用并不需要额外的内存。 memcpy和strcpy都是用于复制内存块的函数,但用途不同。memcpy适用于任意类型的数据,可以指定复制的字节数,直到达到指定长度。而strcpy专门用于复制字符串,它会在遇到空字符('\0')时停止复制。 new和malloc都是用于动态内存分配,但new是C++的运算符,它可以处理对象的构造和析构过程,而malloc/free只是C/C++标准库函数,无法调用对象的构造函数或析构函数。这意味着对于包含构造和析构的复杂对象,应使用new和delete。 在C++中,struct和class的主要区别在于默认的访问修饰符和成员变量的存储方式。struct的默认访问是public,而class是private。struct在内存布局上默认保证成员顺序,而class不作此保证。此外,struct支持public继承,而class支持private或protected继承。 union是一种特殊的类型,其所有成员共享同一块内存,内存大小由最大成员决定,而struct的每个成员都有独立的内存。这意味着在union中,任何时刻只有一个成员的值有效。 队列和栈都是线性数据结构,但它们遵循不同的操作原则。队列遵循先进先出(FIFO)规则,新元素添加到队尾,而元素从队首移除。栈则是后进先出(LIFO)结构,新元素压入栈顶,而元素从栈顶弹出。 指针在不同位宽的系统中占用的内存大小不同:16位机上指针占用2字节,32位机占用4字节,64位机占用8字节。要引用全局变量,可以使用extern关键字,或者包含定义变量的头文件。 这份面试问题文档对于准备C++面试或深入理解C++的关键概念非常有价值。
2024-11-08 上传