C++primer(第四版)复习笔记

再次阅读primer一方面是为了查漏补缺,另一方面也是更加深入的理解C++的思想精髓。在此记录复习中记录的各知识细节及理解,以便后续温故之用。

第一张:快速入门 1. for语句: for(初始化语句;条件测试语句;条件修改表达式){ 语句体 } 。执行顺序:初始化语句在最开始执行一次,然后执行条件测试语句,若成立则执行语句体;然后再执行条件修改表达式,再执行条件测试语句,成立则继续,反之则退出for语句。 2. if else语句缩进:

if(0==i){cout<<“i==0″<<endl;}else{cout<<“i!=0″<<end;}

3、读入未知数目的输入:

int value; while{std::cin >> value}sum+=value;//将输入的所有值相加(个数未知)。

while{std::cin >> value}语句中std::cin>>value返回输入流本身,while通过测试该流的状态来判断条件是否成立。如果状态有效则测试成功。输入流当遇到文件结束符或无效输入(此处比如输入的不是一个整数)时,则流对象的状态时无效的。 4、而文件结束符:Windows下按CTRL+Z,Unix下按Ctrl+D。 5、cin:用于从标准输入中读入的istream对象(cin>>value:从标准输入中通过istream对象cin,将输入读入到标量value) Cout:用于写入到标准输出的ostream对象(cout>>value:将变量值通过osteam对象out输出到标准输出) 标准输入:和程序执行窗口相关联的输入流,这种关联由操作系统设定 标准输出:和程序执行窗口相关联的输出流,这种关联由操作系统设定。 6、函数实参:被传递给调用函数的值。 函数形参:函数定义的组成部分,指明可用什么参数来调用该函数。

第2章: 变量和基本类型 1、计算机将存储器中的每一个字节和一个地址关联。可以用地址表示从该地址开始的任何几个不同大小的位集合,比如可以说地址为0x….的字(4个字节)或地址为0x的字节。要让某个字节(8个bit位)具有意义,必须要知道存储在该地址上的值的类型。(该类型由额外的4个字节的系统开销来指定),从而根据该地址内容的类型来解释其中的数据,这才使得该地址的内容具有实际意义(否则只是由0、1组成的位串)。 2、BOOL与bool FALSE/TRUE与false/true的区别: BOOL是通过#define BOOL int 得到的,因此BOOL为整型,同样FALSE/TRUE也是#define得到的整型,其大小与具体编译环境有关(整型一般为4字节大小,具体看环境)。其取值:BOOL是微软定义的typedef int BOOL(在windef.h中)。它是一个三值逻辑,TRUE/FALSE/ERROR,返回值为大于0的整数时为TRUE,返回值为0时候,为FALSE,返回值为-1时为ERROR。 而bool则是C++中新增的数据类型(C中没有),大小为一个字节,取值为true或false,大小为一个字节。bool取值false和true,是0和1的区别 3、有符号整型:以一个字节的来说明,取值为-8—7:正数,即除了最高位的符号位(为0)低三位的值(0—7);负数(最高位为1)时,转换为补码表示(正数的原码 反码 补码都一样,负数的反码为原码除最高位符号位外其他的取反,而补码为反码加1),因此1000,即表示-8:(反码为1111,补码为1111+1=符号位为1,此外还剩1111,即为8,因此结果为-8);同理1001为-7,1111为-1。 计算补码: 变量A用N位来存储(N不算符号位),当其为负数时计算其补码的方法是A=-(A+2^N); 4、整型的赋值:当把一个超出其范围的值赋值一个变量时,编译器必须调整时期满足要求——将该值对该unsigned类型的可能取值的数目求模,然后求得其值。如将336赋值给unsigned char(一个字节),结果为336%256=80; 在C++中将一个负值赋给unsigned 类型是合法的,其结果也是取模。如将-1赋值给8位的unsigned cahr 结果为:-1%256=255;(模的符号与除数一致,求余结果与被除数一致) 5、取模:任何一个整数a都可以表示成a=k*b+r,归纳:当a和b符号一致时,,求模运算和求余运算所得的c的值一致,因此结果一致 ; 当符号不一致时,结果不一样。求模运算结果的符号和b一致,求余运算结果的符号和a一致。(-7 mod 4=1,-7%4=-3)。 6、为了与C语言兼容,C++的所有字符串字面值都由编译器自动在末尾添加一个空字符。 7、变量提供了有名字的存储区,因此可用变量名来引用对应存储空间的值。变量名只能有字母、下划线、数字组成,不能以数字开头。 左值:可以出现在赋值语句的左边或右边,如变量 右值:只能出现在赋值语句的右边,如字面常量:5 、”abc”。 8、两种初始化方式:复制初始化(int i=10;),直接初始化(int i(10);)。直接初始化效率更高(但对内置类型基本无区别)。 9、当没有指定初始化值时,系统有时会自动初始化。 内置类型自动初始化:在函数体外定义的变量都初始化为0(进程空间中未初始化数据段的所有变量,如全局未指定值的变量、全局和局部未指定值得静态变量,都自动初始化为0或者NULL指针),函数体内未指定初始值的变量(栈中的数据 如自动变量不进行自动初始化,其值未定义,可能为随机值:残留在所在内存地址中的数据值)不进行自动初始化。 类类型的变量的初始化:对于有默认构造函数的类型,可以不显示初始化;而对于没有默认构造函数的类型,必须提供显示的初始化。 10、变量定义:用于为变量分配存储空间,还可以指定初始值。在一个程序中变量有且有一个定义。定义包含声明。 变量声明:用于表明变量类型和名称,不是定义,也不分配空间。用关键字extern int I ;对i进行声明。注意包含初始化式的声明认为是定义(在此之前没有定义该变量,且在此之后不能再定义改变了) extern int i=10;被认为是定义。 11、const:定义非字面值常量:const int bufsize=512; bufsize为仍然为左值变量,但是其值不能再被修改。定义是必须初始化。 Const对象默认为文件局部变量,即在一个文件中定义的const变量在其他文件中是不能使用的,除非定义时申明为全局变量:(file1.cc)extern const int bufsize =512//定义并声明为全局变量;在其他文件中声明(file2.cc)extern const int bufszie;//声明。 12、引用:引用是定义另一变量的别名。(只能是对变量定义别名,不能是字面值 如 int &val=10;//错误 int i; int & val=I;//对,但const引用可以:const int &ref=512;对的),因为引用只是一已有变量的别名,因此引用不会给引用额外分配空间。 13、const 引用:const int val=1024; const int & refval=val;(int & refval2=val;//错误)(对const变量,必须绑定到const 引用上,而不能绑定到非const引用,否则就允许通过引用来改变原const变量值,这是不合法的)。const 引用是指向const对象的引用。 可以对非const变量定义const的引用,此时只能通过变量名修改其值(当然此时const引用的值也变量了!),而不能通过引用名来修改。 14、typefef:定义已有类型的同义词编译时处理,并没有引入新的类型。Typedef int INT;(原名在前);#define则是宏定义,其实是替代,在预编译时简单替代,不进行正确性检查。

#define int_ptr int * (源在后)int_ptr a, b; //相当于int * a, b; 只是简单的宏替换typedef int* int_ptr; (源在前)int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符旅游,放松心情,用眼睛享受风景。

C++primer(第四版)复习笔记

相关文章:

你感兴趣的文章:

标签云: