一、开始

(一)输入输出

1.endl的作用

endl操纵符用于结束当前行,将与设备关联的缓冲区内容刷新到设备中。如果没有这个字符,一旦程序突然崩溃,就可能导致输出还停留在缓冲区里,而不显示到设备。

2.输入输出运算符返回值的理解

“>>”和“<<”是运算符,他们的作用是将其左侧的运算对象。

3.输入输出运算符能自动判断操作对象的数据格式,不需要像C语言的printf和scanf函数一样对输入、输出参数进行格式化处理。因为标准库内定义了不同版本的输入输出运算符(重载?)

3.输入运算符的状态,例如,std::cin >> value 这个表达式,当用户输入非法时候(数据类型不匹配或者遇到输入结束),才会返回非真值。

二、变量和基本类型

(一)基本内置类型

1.基本数据类型包括算术类型和空类型,其中算术类型由字符、整形数、布尔值和浮点数4个类型组成。字符、整形数和布尔值可归为一类,浮点数属另一类。

C++算术类型

大类

具体类型

含义

最小尺寸

实际尺寸

(Windows 10
64bit系统)

整形

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
long

长整型(两个叠加使用也是一个数据类型)

64

64

浮点型

float

单精度浮点数

6位有效数字

32

double

双精度浮点数

10位有效数字

64

long
double

扩展精度浮点数

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 = &pi; //错误,非常量指针指向一个常量。

但反过来允许,例如:

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 = &pi;//OK,指向常量的普通指针

const double * const cpPi = &pi;//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 学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. Java学生成绩

    import java.util.*; public class guanlixiton { public static void main(String[] args) { Scanner in = ...

  2. akoj-1162-计算表达式

    计算表达式 Time Limit:1000MS  Memory Limit:65536K Total Submit:14 Accepted:7 Description 对于一个不存在括号的表达式进行计 ...

  3. java类的继承,多态,抽象类与接口

    知识点梳理:     1,怎样定义自己的类. MyStarFrame,MyStarPanel 类中定义: (1)属性(数据),变量. (2)方法(函数),行为. (3)构造方法(特征,作用,何时被调用 ...

  4. Vue.js安装

    环境 操作系统:window7 虚拟机:centos7 vue.js: 2.8 安装nodejs 参考我得文章: http://blog.csdn.net/u013066244/article/det ...

  5. sshpass做秘钥分发,ansible做自动化运维工具

    最近公司机器的增多,顺便还要上报表系统,考虑到服务器越来越多,手工的管理显得越来的越吃力,所以打算推进公司自动化运维工具的使用. 推进的过程中,一步一个坑踩过来的.由于公司之前未运用过自动化运维工具, ...

  6. android学习ViewPager的简单使用

    使用ViewPager需要引入android.support.v4.View.ViewPager这样的jar包,谷歌公司为解决当前版本碎片化的问题,提供的兼容的包.主要目的就是解决向下兼容问题. 1, ...

  7. mongodb相关 (population)

    记录Mongodb的populate Mongodb是文档型数据库,不存在像关系型数据库一样的外键设置,但通过Mongodb中的populate函数可以模拟关系型数据库的外键连接后的查询功能. 文档型 ...

  8. .NET Core 2.0 开源Office组件 NPOI

    前言 去年 12 月,我移植了大家所熟知 NPOI 到 .NET Core 版本,这里是当时发的博客,当时得到了很多同学的支持,社区反应也很好,在这里非常感谢当时推荐的朋友们. 去年的那个版本是针对于 ...

  9. linux—find指令常见用法示例

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强da的功能,所以它的选项也很多,其中大部分选项都值得我们花 ...

  10. HTML5 web存储

    既然涉及到HTML5知识,那么必定会存在一定的兼容性问题,这里就涉及到浏览器的支持情况了. 浏览器支持情况: Internet Explorer 8+, Firefox, Opera, Chrome, ...