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 ...
随机推荐
- 解决UIViewController中添加子控制器viewWillAppear不调用问题
问题描述: 我在UICollectionViewController中添加子控制器数组, 并在cellForItem中把子控制器数组中对应的控制器对应的view添加到了UICollectionView ...
- 送你一双看见时间的眼睛--时间master软件
开篇语 最近感觉自己时间管理非常错乱,所以去网上找了一些有关于时间管理的软件.然后发现了好几款还不错的软件或者是微信上的应用,下面我把我的一些使用情况以及如何使用的方法写出来,给有需要的朋友进行借鉴! ...
- mybatis 详解(七)------一对一、一对多、多对多
前面几篇博客我们用mybatis能对单表进行增删改查操作了,也能用动态SQL书写比较复杂的sql语句.但是在实际开发中,我们做项目不可能只是单表操作,往往会涉及到多张表之间的关联操作.那么我们如何用 ...
- UiAutomator2.0升级填坑记
UiAutomator2.0升级填坑记 SkySeraph May. 28th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www.sk ...
- Java的原始类型自动包装与解包机制
java5之后对原始数据类型如int.char.long等基本数据类型有自动打包成相应的复合类型Integer.Character.Long等的机制:也可以将复合类型自动转换为原始类型. 这取决于程序 ...
- SQL 三种基本Join
Join是关系型数据库系统的重要操作之一,SQL常用Join:内联接.外联接和交叉联接等. 这里讨论一下这常用的三种连接. 测试环境:db2 v10.1, linux 表定义: --用户 CREATE ...
- SetWindowPos和SetForegroundWindow
There are many closely-related concepts involved, and related terms are often misused, even in the o ...
- css3多列及瀑布流效果
css3内容分块,多列效果(类似报纸版块排版): .div02{ /*count:内容分为几列,gap:内容与分割线的距离,rule:分割线样式*/ column-count:; column-gap ...
- storm学习笔记(一)
1.storm介绍 storm是一种用于事件流处理的分布式计算框架,它是有BackType公司开发的一个项目,于2014年9月加入了Apahche孵化器计划并成为其旗下的顶级项目之一. ...
- 命令行创建Maven项目卡住以及出错解决办法。
第一次通过命令行创建maven项目.结果,果不其然啊,还是出问题了,不过出问题比没有出问题强,知道哪里有问题并学会解决也是一种收获. 遇到的第一个问题,在从仓库下载东西的时候会卡住,我开始以为是网速问 ...