C++基础知识点整理笔记(五)

14. 类中 private,protect,public 三种访问限制类型的区别

  • (一) private 是私有类型,只有本类中的成员函数访问;
  • (二) protect 是保护型的,本类和继承类可以访问;
  • (三) public 是公有类型,任何类都可以访问.

15. struct与union的区别

结构体:将不同类型的数据组合成一个整体,是自定义类型

共同体:不同类型的几个变量共同占用一段内存

  • 1)结构体中的每个成员都有自己独立的地址,它们是同时存在的;共同体中的所有成员占用同一段内存,它们不能同时存在;
  • 2)sizeof(struct)是内存对齐后所有成员长度的总和,sizeof(union)是内存对齐后最长数据成员的长度

16. 什么是内存对齐?字节对齐的规则是什么?

尽管内存是以字节为单位的,但是大部分处理器并不是以字节来存取数据,一般会以四字节、八字节或更长的单位来取内存。使用内存对齐可以保证每次取内存都是访问块内存地址首部以提高存取效率。

字节对齐规则:

  • 1) 结构体中每个变量首地址的偏移量必须能够被其有效对齐值 min(变量自身对齐值, 编译器指定对齐值) 整除。
  • 2) 结构体的自身对齐值为结构体中最宽变量的大小,结构体的大小必须被其有效对齐值 min(结构体的自身对齐值, 编译器指定对齐值) 整除。

17. #define和const的区别

  • 1)#define定义的常量没有类型,所给出的是一个立即数;const定义的常量有类型名字,存放在静态区域
  • 2)处理阶段不同,#define定义的宏变量在预处理时进行替换,可能有多个拷贝,const所定义的变量在编译时确定其值,只有一个拷贝。
  • 3)#define定义的常量是不可以用指针去指向,const定义的常量可以用指针去指向该常量的地址
  • 4)#define可以定义简单的函数,const不可以定义函数

18. 指针和引用的区别

  • 引用是变量的一个别名,内部实现是只读指针
  • 引用只能在初始化时被赋值,其他时候值不能被改变,指针的值可以在任何时候被改变
  • 引用不能为 NULL,指针可以为 NULL
  • 引用变量内存单元保存的是被引用变量的地址
  • “sizeof 引用” = 指向变量的大小 , “sizeof 指针”= 指针本身的大小
  • 引用可以取地址操作,返回的是被引用变量本身所在的内存单元地址
  • 引用使用在源代码级相当于普通的变量一样使用,做函数参数时,内部传递的实际是变量地址

指针和引用是C++中用于处理内存和对象的两种重要概念,它们具有以下区别:

1. 定义和声明方式:
   - 指针(Pointer)是一个变量,可以存储一个对象的内存地址。通过使用`*`符号进行声明和操作,例如`int* ptr;`。
   - 引用(Reference)是一个已存在对象的别名,它相当于对象的一个别名或别称。通过在声明时使用`&`符号来引用一个对象,例如`int& ref = num;`。

2. 空值:
   - 指针可以被赋予空值(nullptr),表示它没有指向任何内存地址。
   - 引用必须在定义时初始化,并且不能指向空值。

3. 内存地址:
   - 指针可以更改指向的内存地址,并且可以重新指向其他对象。
   - 引用一旦初始化后,不能改变其所引用的对象,因此引用始终指向同一个对象。

4. 空间占用:
   - 指针本身需要额外的内存空间来存储地址值。
   - 引用本质上是对象的别名,不需要额外的内存空间。

5. 空指针访问:
   - 指针可以通过检查是否为nullptr来判断是否为空,并进行相应的处理。
   - 引用不会为空,它必须引用一个已存在的对象。

6. 可以有空引用:
   - 指针可以为空,可以指向空地址。
   - 引用不允许为空,必须引用一个已存在的对象。

7. 函数参数传递:
   - 当将指针作为函数参数传递时,函数可以修改指针所指向的对象。
   - 当将引用作为函数参数传递时,函数可以直接操作引用的对象。

总结来说,指针和引用都是用于处理内存和对象的重要工具,但它们之间有一些重要的区别,包括定义和声明方式、空值、内存地址、空间占用、空指针访问、空引用和函数参数传递等方面。在使用时,根据具体需求选择指针或引用进行内存操作和对象别名的引用。

你可能感兴趣的:(面试,C++语言,c++,笔记,后端,c语言,开发语言,面试)