C++ primer(第二章)学习笔记

第二章
1.基本的内置类型:算数类型和空类型。
算数类型:整型和浮点型。算术类型的尺寸,也就是该类型数据所占的比特数在不同机器上有所差别。
可寻址的最小内存块称为字节byte,存储的基本单元称为字word。大多数计算机将内存中的每一个字节与一个地址关联起来。
浮点型可以表示单精度、双精度和扩展精度值。通常float以一个字32比特来表示,double以两个字64比特来表示,long double以3或4个字表示。
转义序列 \n换行符 \t横向制表符 \v纵向制表符 \r回车符
2.变量。变量的基本形式是类型说明符type specifier,随后紧跟由一个或者多个变量名组成的列表,其中变量名以逗号分隔,分号结束。
对象:object。对象是指一块能存储数据并且具有某种类型的内存空间。
!初始化不是赋值。初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替。
3.c++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可以被独立的编译。C++将声明和定义区分开来。声明declaration使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。定义definition负责创建与名字关联的实体。如果想生命而非定义它,就添加extern。而且不要显式的初始化变量。

extern int i;   //声明但不定义
int j;          //声明并且定义
extern double pi = 3.1416; //定义

!变量能且只能被定义一次但是可以被多次声明。
标识符。c++的标识符identifier字母数字下划线组成。
3.名字的作用域
作用域是程序的一部分,大多数作用域以花括号分隔。名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。
4.复合类型 compound type 两种基本的类型:引用和指针。
引用reference:为对象起了另外一个名字,引用类型引用refers to另外一种类型,通过将声明符写成&d的形式来定义引用类型。引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和他的初始值对象一直绑定在一起。所以引用必须初始化,而且初始值必须是一个对象。
!引用并非对象,它只是为一个已经存在的对象所起的另外一个名字。
指针point:指向另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问。指针本身就是一个对象,无须再定义时赋值。
指针存放某个对象的地址,想要获取该地址,需要使用取地址符&。引用不是对象,所以无法定义指向引用的指针。

int ival = 42;
int *p = &ival;

指针的类型要和它所指向的对象严格匹配。

double dval;
double *p1 = &dval;
double *p2 = p1;

指针值(即地址)应属于下列的4中状态。
1.指向一个对象。2.指向紧邻对象所占空间的下一个位置。3.空指针,意味着指针没有指向任何对象。4.无效指针。
空指针,不指向任何对象。以下列出几个生成空指针的方法:

int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;

把int变量直接赋给指针是错误的操作,即使int变量的值恰好等于0也不行。
!建议初始化所有的指针。
Void* 指针是一种特殊的指针类型,可用于存放任意对象的地址。
5.理解复合类型的声明。

int i =1024,*p = &i,&r = i;
//i是一个int型的数,p是一个int型的指针,r是一个int型的引用

!很多人迷惑于基本的数据类型和类型修饰符的关系,后者其实不过是声明符的一部分罢了。

int* p1,p2; //p1是指向int的指针,p2是int
int *p1, *p2;  //p1和p2都是指向int的指针

指向指针的指针

int ival =1024;
int *pi = &ival;   //pi是一个指向int的数
int **ppi = π   //ppi是指向int型的指针

指向指针的引用,引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用。
5.const限定符。const对象一旦创建后其值就不能再改变,所以const对象必须初始化。
对const变量不管是声明还是定义都添加extern关键字

extern const int bufSize = fcn(); //file_1.cc定义并初始化了一个常量,该常量能被其他文件访问

!如果想在多个文件中共享const对象,必须在变量的定义之前添加extern关键字
6.顶层const表示指针本身是个常量,而名词底层表示指针所指的对象是个常量。
7.字面值类型。算术类型、引用和指针都属于字面值类型。自定义类,IO库,string类型则不属于字面值类型,也就不能被定义成constexpr。
8.类型别名。它是某种类型的同义词。

typedef double wages;    //wages是double的同义词
typedef wages base, *p   //base是double的同义词,p是double*的同义词
using SI = Sales_item;   //SI是Sales_item的同义词

nothing
9. decltype,它的作用是选择并返回操作数的数据类型。编译器分析表达式并得到它的类型却不计算表达式的值。

decltype(f())  sum = x;    //sum的类型是函数f的返回类型

!decltype((variable))双层括号的结果永远是引用,必须要初始化。而decltype(variable)结果只有当variable本身就是一个引用时才是引用
10. 自定义数据类型。struct,紧跟类名和类体。最后需要在类定义的最后加上分号。
类只有数据成员。
11.编写自己的头文件。类一般都不定义在函数体内。头文件一旦改变,相关的源文件必须重新编译以获取更新过的声明。
确保头文件多次包含仍能安全工作的常用技术是预处理器。预处理器是编译之前执行的一段程序,可以部分的改变我们所写的程序。
#define指令把一个名字设定为预处理变量,另外两个指令则分别检查某个指定的预处理变量是否已经定义:#ifdef当且仅当变量已定义时为真,#ifndef当且仅当变量未定义时为真。一旦检查为真,则后续操作直至遇到#endif指令为止。

英文名词
地址:address 是一个数字,根据它可以找到内存中的一个字节。
别名声明:alias declaration 为另外一种类型定义一个同义词
算术类型:arithmetic type 布尔值、字符、整数、浮点数等内置类型
绑定:bind 令某个名字与给定的实体关联在一起,使用改名字也就是使用该实体。
复合类型:compound type 是一种类型,它的定义以其他类型为基础
常量指针,引用,表达式:const pointer、const reference、const expression
转换:conversion
声明:declaration 声称存在一个变量、函数或者是别处定义的类型
定义:definition 为某一特定类型的变量申请存储空间
转移序列:escape sequence 字符特别是那些不可打印字符的替代形式。
头文件保护符:header guard 使用预处理变量以防止头文件被某个文件重复包含
标识符:idencfier 组成名字的字符序列,标识符对大小写敏感
整型:integral type
字面值:literal是一个不能改变的值,如数字、字符、字符串等等。单引号是字符字面值,双引号是字符串字面值。
引用:reference 是某个对象的别名
作用域:scope 是程序的一部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值