C++知识点面试总结

本文详细介绍了C++中指针与引用的区别,包括定义、内存地址、指向、语法、空引用处理、函数参数传递、用途和安全性。此外,还讨论了声明与定义的不同,C与C++中struct的异同,以及线程池的创建。最后,文章涵盖了二叉树层序遍历的实现和设计模式中的单例模式,包括懒汉模式和饿汉模式的实现与优缺点。
摘要由CSDN通过智能技术生成

1、指针和引用的区别
1.1 定义:
指针:指针是一个变量,它存储了另一个变量的内存地址。定义指针时使用符号,例如int ptr;定义了一个整数指针。
引用:引用是一个别名,它是一个已存在变量的别名。定义引用时使用&符号,例如int& ref = x;定义了一个整数引用。
1.2 内存地址:
指针:指针存储了变量的内存地址,可以指向不同的对象,可以为nullptr(空指针)。
引用:引用是已存在变量的别名,它没有自己的内存地址,它直接绑定到另一个变量。
1.3 指向:
指针:指针可以在不同的时间指向不同的对象,通过改变指针的值来实现。
引用:引用在创建时被绑定到一个对象,它不能在后续指向其他对象。
1.4 语法:
指针:通过解引用运算符来访问指针指向的对象,例如ptr。
引用:引用使用原始的变量名来访问对象,例如ref。
1.5 空引用:
指针:指针可以为nullptr,表示不指向任何对象。
引用:引用不能为空,它在创建时必须绑定到一个对象。
1.6 传递给函数:
指针:指针可以用于传递对象的地址给函数,实现函数参数的传递。
引用:引用也可用于传递对象给函数,可以实现更加直观的函数调用。
1.7 用途:
指针:通常用于动态内存分配、数组、数据结构、以及需要指向多个对象的情况。
引用:通常用于函数参数传递、操作大型数据结构以避免复制、以及实现运算符重载。
1.8 安全性:
指针:指针需要谨慎使用,因为它们可以导致空指针异常和内存泄漏等问题。
引用:引用通常更加安全,因为它们总是指向一个有效的对象,但需要注意生命周期管理。

2、声明和定义的区别
2.1 声明:
声明是指在程序中告诉编译器一个标识符的存在,但不为它分配内存或分配空间。这就像是一个承诺,告诉编译器在程序的某处会有一个具有特定名称和类型的标识符。
声明通常包括变量、函数、类或其他用户定义的类型的名称和类型信息,但不包括初始化或分配内存的过程。
示例:

extern int x; // x被声明为一个int类型的变量
void myFunction(); // myFunction被声明为一个函数
class MyClass; // MyClass被声明为一个类

2.2 定义
定义是指在程序中为标识符分配内存或空间,也可以为它们分配初始值。定义实际上创建了标识符的实体,使其可以在程序中使用。
通常,只有一个声明,而没有一个定义,但在某些情况下,一个声明也可能是一个定义(例如,在变量定义中初始化时)。
例:

int x = 10; // x被定义为一个int类型的变量并初始化为10
void myFunction() {
   
    // 函数定义
}
class MyClass {
   
    // 类定义
};

声明是指向编译器声明某个标识符的类型和名称,而定义是在程序中为这个标识符分配内存或空间,或为其分配初始值。

3、C和C++中的struct的区别(没答出来)
3.1 在C中:
1)struct可以包含数据成员,但不能包含成员函数。
2)默认情况下,struct的成员都是公有的,可以从结构体外部访问。
3)C中的struct通常用于将相关数据字段组合在一起,而不支持封装和面向对象编程的特性。
示例:

struct Point {
   
    int x;
    int y;
};

int main() {
   
    struct Point p1;
    p1.x = 10;
    p1.y = 20;
    return 0;
}

3.2 在C++中
1)在C++中,struct可以包含数据成员,也可以包含成员函数。这使得C++的struct具备类似于类的特性,包括封装、继承和多态。
2)默认情况下,C++中的struct的成员是公有的,但可以通过关键字"private"、"protected"和"public"进行访问控制。
C++中的struct用于定义类似于类的结构,可以支持面向对象编程的特性。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ghx3110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值