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 ...
随机推荐
- GPUImage原理
GPUImage是一个开元的基于GPU的图片或视频的处理框架,其本身内置了多达120多种常见的滤镜效果,并且支持照相机和摄像机的实时滤镜,并且能够自定义图像滤镜. 美颜的基本概念 OpenGL ES: ...
- akoj-1280另类阶乘问题
另类阶乘问题 Time Limit:3000MS Memory Limit:65536K Total Submit:22 Accepted:20 Description 大家都知道阶乘这个概念,举个 ...
- angular学习(三)-- $scope
1.3 视图数据模型:$scope $scope 是用来视图和数据之间的胶水.粘合剂 视图和控制器之间的数据桥梁 用于在视图和控制器之间传递数据 用来暴露数据模型(数据.行为) 监视模型数据的变化,做 ...
- 分辨率验证工具 - 【Firesizer】的使用
Firesizer是一款测试分辨率的插件. 下载方式:Firefox工具栏——〉工具——〉附加组件--〉搜索Firesizer并安装,浏览器会自动重启 使用方式:浏览器右下角直接切换分辨率即可,如下图 ...
- linux下访问windows的共享
linux下,要访问windows的共享,有好几种情况,下面进行总结. 外面的文章,有点介绍需要使用samba,有点说什么都不需要,只需要mount加上参数, 功能是实现,不过原理,还是不太明白,我发 ...
- a标签链接到当前页内指定位置
<a name="me">hello</a><br/><br/><br/><br/><br/>& ...
- fs模块练习
1.fs+path练习01.判断 当前路径下的public是否存在,不存在则创建02.判断 public下的index.html文件是否存在,不存在则创建 <h1>index</h1 ...
- struts2整合JFreechart 饼图、折线图、柱形图
struts2整合JFreechart 饼图.折线图.柱形图 上效果图: 当然可以将数据导出图片格式存储.具体下的链接里的文件有保存成图片的操作. 因为是strust2整合JFreechart,所以s ...
- ASP.NET CORE 2.0 不小心踩得坑
前言 我是跟着 https://github.com/FQLin/Docs 学习asp.net core 2.0 的 1.EF迁移 EF 的迁移方式有两种: Command-line interfac ...
- Andrew Ng机器学习课程笔记--week5(上)
Neural Networks: Learning 内容较多,故分成上下两篇文章. 一.内容概要 Cost Function and Backpropagation Cost Function Bac ...