C++PrimerPlus第6版 第四章——复合类型

时间:2022-11-27 15:01:28

1,复合类型主要包含:数组、结构、联合、枚举、类、指针、引用等。

2,数组。长度必须确定。即编译阶段,数组的长度就得确定好。所以只能使用常量(#define、const)声明数组长度。如果使用变量声明数组长度,编译器就不知道要分配多少的内存空间。

3,typeName arrayName[arraySize]。数组下标从0开始。

4,数组初始化规则:

c++:数组名是数组首元素的地址,不能将一个数组直接赋值给另一个数组。并且数组的初始化可以使用列表初始化,赋值只能通过一个元素一个元素赋值。如:

C++PrimerPlus第6版 第四章——复合类型

C++PrimerPlus第6版 第四章——复合类型C++PrimerPlus第6版 第四章——复合类型C++PrimerPlus第6版 第四章——复合类型

上面三种都是可以初始化的方式。hotelTips的前两个元素为5.0,2.5,后面三个元素为0;totals的所有元素为0;things一个四个元素,分别为1,5,3,8.数组元素个数通过编译器计算得到。

c++11规则:列表初始化。不允许缩窄变化。

5,字符串:

c风格的字符串、string类。

c风格字符串:字符数据,后加空字符\0。空字符\0的ascii码为0.如下图: 

C++PrimerPlus第6版 第四章——复合类型

字符数组不一定是c风格字符串,c风格字符串一定是字符数组。

6,sizeof关键字获取变量的内存空间大小。头文件cstring中有个strlen函数,能获取字符串长度。即空字符\0前面的字符个数。不包括空字符。所以如果一个字符串m。需要至少strlen(m)+1的数组空间来存储。

7,

C++PrimerPlus第6版 第四章——复合类型C++PrimerPlus第6版 第四章——复合类型

上图,左边时源码文件,右边是程序运行结果。

由于键盘不能输入空字符\0,所以c++使用空白符(空格、tab键、换行符)来表示字符串结束。我们输入Alistair Dreeb。IO输入缓冲区包含Alistair Dreeb,当输入name字符数组时,碰到空格就结束输入。IO输入缓冲区还剩下Dreeb。下一次输入(cin>>dessert),程序直接读取Dreeb,而不需要用户再输入数据。

8,cin.getline()。为解决上面的问题,需要调用cin.getline()每次读取一行数据。

cin.get().与上面的方法类似,唯一的区别是,前者会读取一行,并将换行符丢弃。而后者不会将换行符丢弃。

可以通过这种方式读取一行,并将换行符丢弃。(这里使用重载思想):C++PrimerPlus第6版 第四章——复合类型

9,

C++PrimerPlus第6版 第四章——复合类型C++PrimerPlus第6版 第四章——复合类型C++PrimerPlus第6版 第四章——复合类型

左边是源代码,中间是程序输出,最后是解决途径。

之所以address没有机会输入,是因为程序读入1966后,还有一个换行符留在输入缓冲区。当读入address,直接将换行符认为是空行读入。可以通过最后的方式解决此问题。即将空行通过cin.get()读入。

10,string类: