C++ Primer Plus 第四章 复合类型 学习笔记 (3)

如果第一个变量未初始化,默认为0。后面没有被初始化的枚举量的值将比其前面的枚举量大1。也可以创建多个值相同的枚举量。

enum {zero,null = 0,numero_one,one = 1}; 6.2 枚举的取值范围

每个枚举都有取值范围的上限,通过强制类型转换,可以将取值范围中的任何整数值赋给枚举常量,即使这个值不是枚举值。

6.3 取值范围的定义

找出上限,需要知道枚举量的最大值。

找到大于最大值的,最小的2的幂,减去1,得到就是取值范围的上限。

计算下限,知道枚举量的最小值。

如果不小于0,则取值范围的下限为0,否则,采用寻找上限方式相同的方式,但是要加上负号。

对于选择使用多少空间来存储枚举由编译器决定。

7. 指针和自由空间

对于地址显示结果是十六进制表示法,因为都是常常描述内存的表示法。

指针与C++基本原理

面向对象编程和传统的过程性编程的区别,OOP强调的是运行阶段(而不是编译阶段)进行决策。

运行阶段:程序正在运行是,取决于不同的情况。

编译阶段:编译器将程序组合起来时。坚持原先设定的安排

指针用于存储值的地址。指针名表示的是地址。

*运算符称为间接值或解除引用运算符,将其应用于指针,得到该地址处存储的值。

7.1 声明和初始化指针

指针的声明必须指定指向的数据的类型。

int *p_updates;

*p_updates 的类型是int,所以*运算符被用于指针,所以p_updates变量必须是指针。

运算符*两边的空格是可选的。

int *ptr; /*该情况强调:*ptr是一个int类型的值。*/ int* ptr; /*该情况强调:int* 是一种类型,指向int的指针。*/

在C++中,int*是一种复合类型,是指向int的指针。

double *tax_ptr; 7.2 指针的危险

在C++创建指针时,计算机将分配用来存储地址的内存,但是不会分配用来存储指针所指向的数据的内存。

⚠️注意:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。

7.3 指针和数字

整数可以加减乘除等运算,而指针描述的是位置。

C++语言数字不能作为地址使用,如果要把数字当地址来使用,应通过强制类型转换将数字转换为适当的地址类型。

7.4 使用new分配和delete释放内存

指针在运行阶段 分配未命名的内存以存储值。然后使用内存来访问内存。

C语言中,使用 库函数malloc()来分配内存。C++中使用 ———— new运算符。

7.4.1 要注意使用delete进行内存的释放

需要内存时,直接使用new来请求,这是内存管理数据包的一个方面。

如果使用了delete运算符,使得在使用完内存后,能够将其归还给内存池,这是有效使用内存的关键。

使用delete时,后面要加上指向内存块的指针。

int * ps = new int; // 使用new进行内存分配 ... delete ps; // 使用delete进行内存的释放 ⚠️注意点:

1.使用delete释放ps的内存,但是不会删除指针ps本身。

2.只能用delete来释放使用new分配的内存,但是如果是空的指针使用delete是安全的。

使用delete的关键:用于new分配的内存。不是要使用于new的指针,而是用于new的地址。

❌警告:不能创建两个指向同一个内存块的指针。会增加错误地删除同一个内存块两次的可能性。

7.5 使用new创建动态数组

C++中,创建动态数组,只需要将数组的元素类型和元素数目告诉new即可。必须在类型名后面加上方括号,其中包含了元素数目。

通用格式:

Type_name *pointer_name = new Type_name[num_element]; //例子 int * psome =new int[10]; // 创建10个int元素的数组

new运算符会返回第一个元素的地址

如果使用完new分配的内存,使用delete进行内存的释放。

delete [] psome; // 进行内存的释放

delete和指针直接的方括号告诉程序,应释放整个数组,不仅仅是指针指向的元素。

delete中的方括号的有无取决于使用new时的方括号有无。

对于指针数组的使用,直接可以按照普通数组的使用即可。

7.6 使用new和delete时,要遵循的规则

不要使用delete来释放不是new分配的内存。

不要使用delete释放同一个内存块两次。

如果使用new[]为数组分配内存时,则应使用delete[] 来释放。

如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放。

对空指针使用delete时很安全。

8. 指针、数组和指针算术

指针和数组基本等价的原因:指针算术(pointer arithmetic) 和C++ 内部处理数组的方式。

对整数变量 + 1,其值增加1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysdjw.html