C++PrimerPlus第6版 第四章——复合类型
1,复合类型主要包含:数组、结构、联合、枚举、类、指针、引用等。
2,数组。长度必须确定。即编译阶段,数组的长度就得确定好。所以只能使用常量(#define、const)声明数组长度。如果使用变量声明数组长度,编译器就不知道要分配多少的内存空间。
3,typeName arrayName[arraySize]。数组下标从0开始。
4,数组初始化规则:
c++:数组名是数组首元素的地址,不能将一个数组直接赋值给另一个数组。并且数组的初始化可以使用列表初始化,赋值只能通过一个元素一个元素赋值。如:




上面三种都是可以初始化的方式。hotelTips的前两个元素为5.0,2.5,后面三个元素为0;totals的所有元素为0;things一个四个元素,分别为1,5,3,8.数组元素个数通过编译器计算得到。
c++11规则:列表初始化。不允许缩窄变化。
5,字符串:
c风格的字符串、string类。
c风格字符串:字符数据,后加空字符\0。空字符\0的ascii码为0.如下图:

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


上图,左边时源码文件,右边是程序运行结果。
由于键盘不能输入空字符\0,所以c++使用空白符(空格、tab键、换行符)来表示字符串结束。我们输入Alistair Dreeb。IO输入缓冲区包含Alistair Dreeb,当输入name字符数组时,碰到空格就结束输入。IO输入缓冲区还剩下Dreeb。下一次输入(cin>>dessert),程序直接读取Dreeb,而不需要用户再输入数据。
8,cin.getline()。为解决上面的问题,需要调用cin.getline()每次读取一行数据。
cin.get().与上面的方法类似,唯一的区别是,前者会读取一行,并将换行符丢弃。而后者不会将换行符丢弃。
可以通过这种方式读取一行,并将换行符丢弃。(这里使用重载思想):
9,



左边是源代码,中间是程序输出,最后是解决途径。
之所以address没有机会输入,是因为程序读入1966后,还有一个换行符留在输入缓冲区。当读入address,直接将换行符认为是空行读入。可以通过最后的方式解决此问题。即将空行通过cin.get()读入。
10,string类:
C++PrimerPlus第6版 第四章——复合类型的更多相关文章
- C++ Primer Plus 第四章 复合类型 学习笔记
第四章 复合类型 1. 数组概述 1.1 数组的定义 数组(array)是一种数据格式,能够存储多个同类型的值.每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素. 数组声明的三 ...
- C++ primer plus读书笔记——第4章 复合类型
第4章 复合类型 1. 如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数. 2. 如果对数组的一部分进行初始化,则编译器把其他元素设置为0.因此,将数组中的所有元素初始化为0,只要显式 ...
- Java 线程第三版 第四章 Thread Notification 读书笔记
一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(lo ...
- C#高级编程第11版 - 第四章 索引
[1]4.2 继承的类型 1.C#不支持类的多继承,但它支持一个接口继承自多个接口. 2.单继承:单继承允许一个类继承自另外一个基类,C#支持. 3.多级继承:多级继承允许创建一个类继承自它的父类,而 ...
- MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器
ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS使用传感器和执行器 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第四 ...
- 《C++ Primer》 第四版 第7章 函数
<C++ Primer> 第四版 第7章 函数 思维导图笔记 超级具体.很具体,图片版,有利于复习查看 http://download.csdn.net/detail/onlyshi/94 ...
- 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具
计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具 一 基础 1:向量分析和变换 两个工具 可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...
- 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算
<利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...
随机推荐
- 安装lvs过程
linux我是最小化安装的mini,安装完成后搭建本地yum,首先安装Development Tools开发工具组 1)在各服务器上修改主机名: [root@LVS1 ~]# hostname LVS ...
- java代码块的理解
最近在复习java基础,在看到java代码块的时候,忽然发现自己貌似对于java代码块一无所知,于是赶紧对着一些资料实战演练了一把. 对于java代码块,不难根据名称看出其实就是一些java语句的集合 ...
- String类的重要方法与字段
1.Length():获取当前字串长度 2.charAt(int index):获取当前字符串对象下标index处的字符 3.getChars():获取从指定位置起的子串复制到字符数组中 参数:int ...
- tkinter第四章 输入框,校对
#最简单的输入框 import tkinter as tk root = tk.Tk() e = tk.Entry(root)#输入框的类 e.pack() e.delete(0,tk.END)#把输 ...
- 201521123105 第六周Java学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法1.1 Object对象 ...
- 201521145048《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
- 201521123103 《java学习笔记》 第十四周学习总结
一.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 二.书面作业 1. MySQL数据库基本操作 1.1建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现 ...
- php数据库连接及简单操作
数据库改密码:mysql的控制台mysql console 中文乱码解决方法:原因编码格式不一致1.建立数据库的时候,字符集选择utf-82.修改mysql的配置:在[mysqld]模块下面添加cha ...
- iOS内购 服务端票据验证及漏单引发的思考.
因业务需要实现了APP内购处理,但在过程中出现了部分不可控的因素,导致部分用户反映有充值不成并漏单的情况. 仔细考虑了几个付费安全上的问题,凡是涉及到付费的问题都很敏感,任何一方出现损失都是不能接受的 ...
- ThreadLocal原理及使用示例
简介:本文已一个简要的代码示例介绍ThreadLocal类的基本使用方式,在此基础上结合图片阐述它的内部工作原理. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblog ...