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 ...
随机推荐
- NYOJ--20--搜索(dfs)--吝啬的国度
题意,N座城市有N-1条路,目的是找到哪个城市可以到目的城市 //NYOJ--search--吝啬的国度 #include<iostream> #include<vector> ...
- Head First 设计模式 第2章 观察者模式
第2章.观察者模式 1.定义: 在对象之间定义一对多关系,当一个对象改变状态时,该对象的依赖会收到通知,并自动更新. 2.介绍 在介绍观察者模式之前,先来说一个日常生活中经常碰到的事(可能现在的人碰到 ...
- JAVA中extends 与implements的用法
1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重 ...
- 浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
- Redis-入门笔记-15min带你一览redis
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有.望各位支持! 少年入门笔记,整理出来一起入坑!入门的视屏 ...
- Java面试题大全
前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...
- FFT 专题讲解
FFT是什么? FFT是快速傅里叶变换(fast Fourier transform)的简称.在ACM领域主要是用来快速求解多项式乘法的算法, 在信号领域也有很大用途 基础知识 卷积 举个例子,给你两 ...
- MJExtension框架源码分析
iOS开发中经常会用到数据和模型的互相转换,大致有两种转换方式:1.手动写转换的代码,2.利用开源库进行转换.常用的开源库有:JSONModel.Mantle.MJExtension.YYModel等 ...
- PHPExcel导出excel表格
if(!function_exists('exportExcel')){ //导出excel文件 function exportExcel($datas, $save_method='ht ...
- 使用Visual Studio 2017开发python,并在iis上部署Python Django
作为宇宙第一IDE,怎么可以不支持python开发呢? 1.Visual Studio Installer 扩展Python开发 开始菜单中打开Visual Studio Installer,点修改. ...