《C++ primer plus》读书笔记(一)(3)
(8)、指针和数组名的区别: 可以修改指针的值,而数组名是常量; 对数组名使用sizeof得到数组的字节数,而对指针使用sizeof得到指针的长度。
(9)、short tell[10]; cout << tell; // 数组名本身为其第一个元素的地址,如:&tell[0] ,即一个2字节内存块的地址。
cout << &tell; // 输出的是一个20字节内存块的地址。
(10)、给cout提供一个字符的地址,它将从该字符开始打印,直到遇到空字符为止。
(11)、要打印一个指针的地址,必须把这个指针强转成另一种指针类型,如 (int *) p;
29、使用new创建动态结构——struct1 * s = new struct1; // 此时,结构标识符是指针,所以不能使用成员运算符句点(.),
// 只能使用箭头成员运算符(->)访问成员或者使用(*s).price 来访问成员。
30、自动存储、静态存储和动态存储——
(1)、函数内部定义的常规变量为自动变量,存储在栈中,后进先出(LIFO),程序执行中,不断增大缩小。为自动存储。
(2)、在函数外面定义,或声明变量使用static关键字的变量为静态变量。静态存储是整个程序执行期都存在的变量。
(3)、使用new创建的变量为动态存储。new和delete管理类一个内存池,被称为free store 或 heap。
(注意!栈中自动添加和删除机制使得占用的内存总是连续的,而new和delete可能导致只有存储区不连续)
31、模板类vector——类似string,也是一种动态数组,是使用new创建动态数组的替代品,自动使用new和delete管理内存。
#include<vector> using namespace std; // 包含头文件,vector位于std名称空间中
vector<int> ele(10); // 创建一个名为ele的vector对象,可存储10个类型为int的元素。
(注意,C++11中可用列表初始化。类型可以是变量)
32、模板类array——与数组一样,长度固定,使用栈存储,效率与数组相同,而更方便、安全。
#include <array> using namespace std; array<int,5> arr; // 名为 arr 的array对象,包含5个int元素。
(注意,类型不能是变量!可用列表初始化)