C++Primer 一

时间:2023-03-09 21:39:07
C++Primer  一

1、vertor和数组的区别:

数组的长度固定、而且程序是无法知道一个给定数组的长度,数组没有获取器容量大小的size操作,也不提供puch_back操作在其中自动添加元素

2、数组定义中的类型可以示内置类型或者类类型。除引用之外数组元素的类型还可以是人与的复合类型。没有所有元素都是引用的数组。

3、const类型在静态编译时,其值就存在。其他的类型 Eg:  int 类型 只有在运行时才会存在

4、在函数体外定义的 内置数组,其元素初始化为0.

在函数体内定义的 内置数组,其元素无初始化

5、不管数组在哪里定义,如果其元素为类类型则自动调用该类的默认构造函数进行初始化。如果类没有默认构造函数,则必须要为该数组的元素提供显示的初始化

6、显示初始化不需要指定数组的为数值

eg: int a[] ={0、2、3};

7、在标准功能上,不允许用数组赋值,一些非标准可以,但是那样将无法跨平台使用

8、如果必须在数组中添加新元素,程序员就必须自己管理内存。要求系统重新分配一个新的内存用于存放更多的数组,然后把原数组的所有元素复制到新分配的内存空间中

9、数组越界要通过自己不断的测试,即使通过编译测试的程序也会出现致命的错误

10、导致安全问题的最常见原因是所谓的“缓冲区溢出”。当我们在编程时没有检查下标,并且引用了越出数组或其他类似数据结构边界的元素时,就会导致类似的错误

11、有效指针的三种状态:

(1)保存一个特定对象的地址

(2)指向某个对象后面的另一个对象

(3)或者是0值

(为初始化的指针是无效的 )

12、void*指针指支持几种有限的操作

(1)  与另一个指针进行比较

(2)向函数传递void*指针

(3)从刚函数返回void*指针

13、引用和指针的区别

(1)引用总是指向某个对象,第一引用时没有初始化是错误的

(2)给引用赋值修改的是该引用所关联对象的值而并不是使引用与另一个对象关联

(3)引用已经初始化,就始终指向同一个特定的对象

14、指针的算术操作只有在原指针和计算出来的新指针都指向同一ugeshuzu的元素,或指向该数组存储空间的下一单元时才是合法的。如果指针指向以对象。我们还可以在指针上加1从而获取指向相关的下一个对象的指针

15、只要指针指向数组元素就可以对它进行下标操作

16、C++允许计算数组或对象的超出末端的地址,但不允许对比地址进行解引用操作,而计算数组炒出末端位置之后或数组首地址之前的地址都是不合法的

17、C++语言强制要求指向const对象的指针也必须具有const特性

18、不准使用void*指针,保存const对象,而必须使用constvoid*类型的指针保存const对象的地址

19、不能使用指向const对象的指针修改基础对象,然后如果该指针指向的是一个非const对象,可用其他方法修改其所指的对象

20、const限定符可以放在类型的前面,也可以放在类型的后面。

21、如果指针Cp所指向的字符数组没有Null结束符。则此循环将会失效。这时,循环会从Cp指向的位置开始读数,直到遇内存中某处Null结束符为止

22、数组类型变量三个重要限制

(1) 数组长度固定不变

(2)在编译时必须知道其长度

(3)数组只在定义它的块语句内存中

23、每一个程序在执行过程是都占用一块可用的内存空间,用于存放动态分配Udell对象,此内存空间称为程序的*存储区域堆

24、动态数组长度后面的一对空圆括号,多数组元素做值初始化

25、对于动态分配的数组,其元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。