C++面试八股-基础(三)

15.指针和引用的区别

        1)定义

        指针:是一种直接指向存储器中某个地址的值的变量。

        引用:是变量的一个别名,与被引用的变量可以算作是同一个变量。在编译时,编译器会自动执行解引用操作,即帮忙检查该引用是否初始化。引用并非基于const指针实现,虽然二者在使用上有一定的相似程度。

        2)初始化

        指针:每次赋值时,指针都可以被赋值为不同的值(对于普通指针,未被const修饰的)

        引用:只能初始化一次,绑定了一个变量之后不能再绑定到其他变量上。后续的赋值实际上是对被绑定变量的值的修改。

        3)特殊值

        指针:可以是NULL或者nullptr(C++11及以上)

        引用:没有空引用,只能在初始化的时候同步绑定到一个变量上。

        4)内存占用

        指针:指针本身会根据系统位数占用一定大小,在32位系统下占4字节,64位下占8字节;

        引用:引用本身所占内存取决于被引用变量的大小,因为二者指向的是同一块内存空间,即编译器不会为引用额外开辟一块空间,否则用sizeof检查引用的大小就不是被引用对象的大小,这与实际不符。但是在实际底层实现上,引用可能被当做指针进行处理,而这个处理过程对于用户来说是不透明的,即我们不能操作引用的地址。

        5)多级引用与指针

        指针:可以使用多级指针,例如多维数组的操作

        引用:没有多级引用

        6)安全性

        大多数情况下使用引用比指针更安全,因为引用在编译器底层会进行更多的类型检查或者限制,但是指针则不会,不然也没那么多野指针空指针的问题了lol。

        7)实际使用

        指针:一般用在直接操作内存的地方,或者需要手动管理内存的地方,例如数组的操作或者类对象的管理上,希望对象的构造/析构由用户决定。

        引用:通常用于函数的传参或者返回,避免不必要的临时拷贝,这样做会提高效率,同时有着更高的安全性。

16.内存对齐定义、作用及规则

        定义:指计算机在内存中按照一定规则排列数据,确保数据的起始地址是某个特定值的整数倍,这个特定值通常与数据类型有关。

        作用:提高数据访问效率,减少内存碎片,确保数据正确读取。

        规则:

        1)基本数据类型:

        char:对齐值为1

        short:对齐值为2

        int,float:对齐值为4(32位系统)

        double:对齐值为8(64位系统)

        2)结构体或类:

        ①:结构体内任何K字节的基本数据类型对象相对于结构体首地址的偏移必须是K的整数倍;

        ②:满足①后,还需满足结构体首地址是结构体内最大基本对象长度的整数倍,即可保证字节对齐。

        在C++中,可使用#pragma pack(n)... #pragma来强制要求以n字节为对齐值。

        举例:

struct test
{
    int i;     // offset: 0
    char c;    // offset: 4
    in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值