C++ Primmer 学习笔记
一、开始
(一)输入输出
1.endl的作用
endl操纵符用于结束当前行,将与设备关联的缓冲区内容刷新到设备中。如果没有这个字符,一旦程序突然崩溃,就可能导致输出还停留在缓冲区里,而不显示到设备。
2.输入输出运算符返回值的理解
“>>”和“<<”是运算符,他们的作用是将其左侧的运算对象。
3.输入输出运算符能自动判断操作对象的数据格式,不需要像C语言的printf和scanf函数一样对输入、输出参数进行格式化处理。因为标准库内定义了不同版本的输入输出运算符(重载?)
3.输入运算符的状态,例如,std::cin >> value 这个表达式,当用户输入非法时候(数据类型不匹配或者遇到输入结束),才会返回非真值。
二、变量和基本类型
(一)基本内置类型
1.基本数据类型包括算术类型和空类型,其中算术类型由字符、整形数、布尔值和浮点数4个类型组成。字符、整形数和布尔值可归为一类,浮点数属另一类。
C++算术类型
大类 |
具体类型 |
含义 |
最小尺寸 |
实际尺寸 (Windows 10 |
整形 |
bool |
布尔类型,实际上是0和1 |
未定义 |
8 |
char |
字符类型 |
8位 |
8 |
|
wchar_t |
宽字符(UNICODE出现前的宽字符类型) |
16位 |
16 |
|
char16_t |
Unicode字符 |
16 |
16 |
|
char32_t |
Unicode字符 |
32 |
32 |
|
short |
短整型 |
16 |
16 |
|
int |
整形 |
16 |
32 |
|
long |
长整型 |
32 |
32 |
|
long |
长整型(两个叠加使用也是一个数据类型) |
64 |
64 |
|
浮点型 |
float |
单精度浮点数 |
6位有效数字 |
32 |
double |
双精度浮点数 |
10位有效数字 |
64 |
|
long |
扩展精度浮点数 |
10位有效数字 |
12 |
长度规定:int>=short,long>=int,long long>=long
字符型分为三种:char,signed char和unsigned char,三者不是同一类型。但char 和 signed char具体含义如何区分,由编译器决定。
字符串常量实际上是由字符常量组成的数组,同时编译器在这个数组后面加1个空字符“\0”。
Cout输出字符变量例如char =
‘a’,并不是输出“a”,而是对应的ascii数字。
(二)变量
1.变量的概念。变量提供一个具名的可供程序操作的存储空间。在C++中,变量和对象意义相同。
2.初始化问题。在C++中,当声明某变量使用“=”符号时候,是初始化,不是赋值语句。
3.初始化形式。在C++新标准中,全面应用{}来初始化对象(包括变量和类对象),例如 int a{9}。
4.变量的声明和定义。如果仅仅是声明一个变量,则用extern关键字,例如 extern int a。变量可以被声明多次,但只能定义一次。
5.引用必须初始化,且初始化后不能更改。
6.关于晦涩难懂常量(const)的一些概念。
(1)指向常量的指针和引用必须也是对应的常量指针和引用。不允许一个非常量引用绑定一个常量,但允许一个常量引用绑定一个非常量;同理,不允许一个非常量指针指向一个常量,但允许一个常量指针指向一个非常量。例如:
const int a = 1;
const int &b = a; //正确。
int a2 = 3;
int &b2 = a;//错误,引用不匹配。
但允许将一个常量引用绑定到一个非常量上,例如:
cons tint &reb = a2;
const double pi = 3.14;
double *ppi = π //错误,非常量指针指向一个常量。
但反过来允许,例如:
double pi2 = 3.14;
const double *ppi2 = &pi2; //正确,允许一个常量指针指向一个非常量。
(2)关于顶层const 指针和底层const指针的概念。实际上主要是涉及两个概念,一个是该变量指向变量是const变量,即变量不能被改变;一个是该指针本身是常量,指针不能被改变,称为常量指针。通过以下例子来解释:
const double pi =
3.14;
double rate = 0.68;
double * const pRate = &rate; //OK,这是一个指向非常量的常量指针
const double * pPi = π//OK,指向常量的普通指针
const double * const cpPi = π//OK,指向常量的常量指针。
(3)常量表达式的要求。左值定义为常量,右值也应该是常量,也就是说他的值在编译时候就能够确定。
(三)类型别名(typedef)
typedef char *pstring;
const pstring cstr = 0,这个语句的理解不能使用简单替换办法,否则会得出错误的意义。正确的理解办法是将pstring等同于一个数据类型,因此,此句话的const是修身指针的,表示为指向char的常量指针,而非const char *所表明的指向char常量的指针。虽然都是指针,但意义不同。
三、数组
(一)数组的初始化和赋值应注意的问题
1.数组之间不能直接赋值,即数组名不能直接进行赋值运算。
2.复杂数组声明的几个例子:
int *
ptrs[10] //ptrs是含有10个整形指针的数组。
int &refs[10]
//错误,不存在引用的数组。
int (*Parray)[10] //Parray是一个指向10维整数组的指针。
int (&arrayRef)[10] //arrayRef是一个10维整形数组的引用。
int *(&arrayRef)[10] //arrayRef是一个10维整形指针数组的引用。
要理解数组声明的含义,最好的办法是从数组的名字开始,由内而外阅读。
(二)数组和指针之间的关系
1.数组名和对应类型的指针互为等价(但数组名不能进行++或—操作)。在用到数组名的时候,它被编译器自动替换为指向该数组第一个元素的指针。
例如 int a[10] = {0}; 则有int *pArr =
a,等价于 int *pArr = &a[0];
C++ Primmer 学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- 计算机四级网络工程师--《操作系统(Operating System)》重点内容学习
开篇语 今天开始看<操作系统>,没办法,计算机网络技术还算有点底子.至于操作系统要不是以前看过一些这方面的书籍,以及上学期学了单片机工作原理,我估计我真的是懵逼的!所幸,在网上找的233网 ...
- ChromeDriver,IEDriver,Firefox配置
ChromeDriver: 下载ChromeDriver.exe,放入某个文件夹,如C:\Program Files (x86)\Google\Chrome\Application,把此路径加入pat ...
- 【有意思的BUG】反转的水印
今天无意中看到一个图集,翻着翻着感觉到哪儿不对劲.是的,水印打反了,怎么会出现这样的局面我也不知道,可能就是手抖了吧. 通过与懂这方面知识的人请教,120%的可能是因为图片本身就自带水印,而不是因为后 ...
- python时间序列分析
题记:毕业一年多天天coding,好久没写paper了.在这动荡的日子里,也希望写点东西让自己静一静.恰好前段时间用python做了一点时间序列方面的东西,有一丁点心得体会想和大家 ...
- SSH服务(一)
一.初始SSH SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的 ...
- 多线程(五) java的线程锁
在多线程中,每个线程的执行顺序,是无法预测不可控制的,那么在对数据进行读写的时候便存在由于读写顺序多乱而造成数据混乱错误的可能性.那么如何控制,每个线程对于数据的读写顺序呢?这里就涉及到线程锁. 什么 ...
- TestNG--入门介绍教程
阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装Testng TestNG最简单的测试 TestNG的基本注释 TestNG中如何执行测试 使用testt ...
- [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展字符串位置方法(4)
本文,我们接着之前的框架继续扩展,这次扩展了一共有5个与字符串位置相关的方法 between( left, right ) 返回两个字符串之间的内容, 如果第二个参数没有传递,返回的是找到的第一个参数 ...
- javascript-new关键字
先上一段代码: function Person(name,age,job) { this.name=name; this.age=age; this.job=job; this.sayName=fun ...
- ==和equals()的区别
简单的一句话说明就是: == 比较Stack中的值(引用数据类型stack中存放的是对象的堆内存地址). equals() 通常被覆写为比较对象的值 那么==和equals()之间到底有什么具体的区别 ...