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 ...
随机推荐
- little bird
LITTLE BIRD Bzoj 3831 相对而言是一道比较简单的DP,不过它需要用单调队列优化.首先是朴素O(n2), if(d[j]>f[i]) f[i]=min(f[i],f[j]); ...
- Akka(16): 持久化模式:PersistentFSM-可以自动修复的状态机器
前面我们讨论过FSM,一种专门为维护内部状态而设计的Actor,它的特点是一套特殊的DSL能很方便地进行状态转换.FSM的状态转换模式特别适合对应现实中的业务流程,因为它那套DSL可以更形象的描述业务 ...
- POJ-1861-NETWORK 解题报告
Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16628 Accepted: 6597 Specia ...
- 解决js中post提交数据并且跳转到指定页面的问题总结
今天在开发中过程中遇到了这个问题,js中利用JQuery中的 $.post("url", id, function(){}); 这个方法是数据提交正常,但是后台处理完成之后跳转无法 ...
- [Poi2010]Monotonicity 2 线段树
这道题考试的时候先打了个dfs暴力.又打了个O(n²)的动规.然后竟然心血来潮拍了一下..明明知道过不去的...然后水了50分(20个测试点这么多啊啊啊啊). 因为它已经提前给你如果长度为i时下一位的 ...
- HTML style基础2
2017.0807 晴 style 样式实例 背景颜色 font-family: '.PingFang SC';">背景颜色 标题<h2 style=" font-f ...
- [算法题] Reverse Linked List II
题目内容 题目来源:LeetCode Reverse a linked list from position m to n. Do it in-place and in one-pass. For e ...
- Linux - 简明Shell编程06 - 循环语句(Loop)
脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash # for循环 for fil ...
- 在Linux下更新或安装curl
问题 我这有一个项目是.net core写的,然后运行到centos机器上,刚开始发请求都能正常处理,但是时间长了,程序会报Segmentation fault,然后退出,我查了一下系统log,说的是 ...
- Windows 程序注册成服务的方法
Windows 程序注册成服务的方法 将windows 程序注册成服务这个是很多后台程序需要实现的功能,注册成服务后,你的程序就可以像windows 服务一样随系统启动,并且隐藏你的控制台界面.下面介 ...