C Primer阅读笔记

发布 2021-05-02 18:55:28 阅读 9511

1 调用gnu编译器的默认命令是g++ o executename

2对于实际运行的程序而言,float类型大都常常不够—float类型只能保证有6位有效数字,而double类型至少可以保证10位有效数字,能满足绝大多数的要求。

3多行字面值:在一行的末尾加一个反斜线符号可以将此行和下一行当作同一行处理。p36

4c++是一门静态类型语言,在编译时会做类型检查p39

5c++支持2种初始化变量的形式:复制初始化(copy-initialization)和直接初始化(direct- initialization). 复制初始化语法用“=”直接初始化语法则是将初始化式放在括号中。

例:int a(1024);/直接初始化。

int a=1024;//复制初始化p43

6 对于基本类型的初始化,2种初始化方式没有差别。而对于类类型的对象而言,有些初始化仅能用直接初始化完成,而不能用复制初始化。p44

7一个类可以定义多个构造函数,构造函数能接受多个参数。

8当定义的变量没有初始化时,系统会帮助我们初始化:这取决于变量的类型和变量定义的位置。

在函数体外定义的变量都初始化为0,在函数体内定义的变量不进行自动初始化,会是一个随机值。建议每个基本类型的变量对象都要初始化。

9变量的声明和定义的区别:

变量的定义用于为变量分配内存空间,还可以为变量指定初始化。在一个程序中,变量有且仅有一个定义。变量的声明用于向程序说明变量的类型和名字,在一个程序中变量可以声明多次,但只能定义一次。

extern声明不是定义,也不分配存储空间,事实上,它只能说明变量的定义在程序的其他地方。

任何在多个文件中使用的变量都需要与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明。p46

10作用域种类:

全局作用域、局部作用域、语句作用域、类作用域、命名空间作用域。

11通常把一个对象定义在它首次出现的地方是一个很好的办法。而c必须将变量的声明放在函数的开头,不能随处安置。

12 在编写**和设计程序时有两点需要考虑:程序可读性和可维护性。

13 在程序的上下文中使用到的数字或者是常量,一眼看不出其具体含义的东西称之为“魔数”(magic number)。解决办法:使用宏定义或者是const限定符。

14const int buffersize = 512;//定义 buffersize为常量且初始化为512,且在以后的程序中不能修改。任何尝试修改都会出现编译错误。

15在全局作用域定义非const变量时,它在整个程序中都可以访问。利用extern。

16与其他变量不同,除非特别说明,在全局作用域中声明的const变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。p50

17非const变量默认为extern。要使const变量在其他的文件中可以被访问,必须显式的指定为extern。

18 要使在其他文件中访问某文件的const变量,必须在此文件定义const变量时进行extern说明,否则会提示错误。p50

19 引用在实际程序中主要作为函数的形参存在。引用只不过是对象的另一个名字,要想说明引用到底指向哪一个对象,唯一方法是定义引用时进行初始化。

引用必须初始化,并且初始化时必须是一个对象,不能是一个常量。

如果引用没有定义为const类型,则对于同一个对象可以有多个引用。如果有:

const int &refval = ival;

20enum枚举类型使用:

21class类定义时与结构体struct定义一样,花括号后面不要忘记“;”

22定义普通变量和定义类的数据成员很相似,但有一个非常重要的区别:一般不能把类成员的初始化作为类定义的一部分。当定义数据成员时,只能指定该数据成员的名字和类型。

初始化是利用构造函数来控制的。

23用struct与class定义类的唯一区别是在于默认访问级别:默认struct为public,而class为private。

24头文件为相关声明提供了一个集中存放的位置:头文件一般包含类的定义、extern变量的声明和函数的声明。

25 编译和链接多个源文件命令:

gcc –c

gcc -c sales_

gcc sales_ –o main

26头文件用于声明而不是用于定义。所以下列为错的:

extern int a=5;

double b;

因为他们都是定义。

因为头文件包含在多个源文件中,所以不应该含有变量或函数的定义。因为程序中变量或函数只能定义一次。

对于c++中的类有3个例外:头文件可以定义类、值在编译时就已经知道的const对象和inline函数。这些实体可以在源文件中定义多次,只要每个源文件中的定义相同。

27const变量默认时是定义该变量的文件的局部变量。

当我们在头文件中定义了const变量时,每个包含该头文件的源文件都有了自己的const变量,其名称和值一样。

28多次包含同一文件不会引起该头文件定义的类和对象被定义多次,使得头文件安全的通用做法是使用预处理器定义头文件保护符。

29c++中的定义了一个抽象数据类型标准库:其中最重要的标准库类型是string,vector和bitset。string类型支持长度可变的字符串,vector用于保存一组指定类型的对象。

bitset可以把某个值当作位的集合来处理。

30using namespace std;

31初始化string 对象的方式。

32string类类型和许多其它库类型都定义了一些配套类型,通过这些配套类型,库类型的使用就能与机器平台无关。size_type就是这些配套类型中的一种。

为了使用由string类型定义的size_type类型,程序员必须加上作用域操作符来说明所使用的size_type类型是由string类定义的。

string str(“123545436”);

for(string::size_type index=0;index !=

cout<33vector是同一种类型的对象的集合。每个对象都有一个对应的整数索引值。vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象必须是同一种类型的。

vector是一个类模板,使用类模板可以编写一个类定义或者函数定义,而用于多个不同的数据类型。

vector不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此vector 和 vector都是数据类型。

34vector对象(以及其他的标准库容器对象)的重要属性就在于可以在运行时高效的添加元素。vector元素是连续存储的。

35使用配套类型size_type类型时,必须指出该类型是在**定义的。vector类型总是包括vector的元素类型:

vector::size_type是对的 vector::size_type是错的。

36在vector中下标一般不用:

vector ivec;

for(vector::size_type index=0;index!=10;index++)

ivec[index] =index;这个是错误的。

利用vector的下标不能向对象中添加元素。因为这里ivec是一个空对象。下标只能用于获取已存在的元素。

vector ivec;

for(vector::size_type index=0;index!=10;index++)

这个是正确的。

37注意:除了使用下标来访问vector的元素之外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。所谓迭代器是一种检查容器内元素并遍历元素的数据类型。

38标准库为每一种标准容器(包括vector)定义了一种迭代器类型。现在的c++更倾向于利用迭代器而不是下标操作来访问元素。

vector::iterator iter;//定义了一个名为iter的变量,它的数据类型是由vector定义的iterator迭代器。

vector ivec;

for(vector::iterator iter =

iter=0;正确的。

39有时候只对于容器中的元素进行读取操作,那么这时候为了防止程序员误修改vector中的数据,定义一种新的方式:利用const_iterator.

40数组是c++中类似于标准库vector类型的内置数据结构。与vector类型相比,数组的显著缺陷在于:数组的长度是固定的,而且程序员无法知道一个给定的数组的长度是多少。

数组没有获取数组长度的函数。如果需要更改数组的长度,用户不得不创建一个更大的数组,然后把原有数组的元素复制到新数组空间中。很明显,使用起来数组很不方便。

p9641现在的c++编程规定:数组被严格的限制于程序内部使用,只有当性能测试表明使用vector无法达到必要的速度要求时,才会使用数组。

42数组的维数必须使用常量表达式。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型const对象。非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。

43现在c++程序采用vector类型和迭代器来取代一般的数组、采用string类型取代c风格的字符串。

44一个有效的指针必然是以下3种状态之一:保存一个特定对象的地址;指向某个对象后面的另一个对象;或者是0值(不指向任何对象)。

45很多运行时错误都是源于使用了未初始化的指针。

46指针初始化或者赋值只能使用以下4种类型的值:

1)0值常量表达式。

2)类型匹配的对象的地址。

3)另一个对象之后下一地址。

4)同类型的另一个有效指针。

47void*指针是一种特殊类型的指针,可以保存任何类型对象的地址。void*只支持几种有效的操作:与另一个指针进行比较;向函数传递void*指针或从函数返回void*指针;给另一个void*指针赋值。

阅读笔记格式阅读笔记格式

阅读笔记格式 阅读笔记格式4篇。读书笔记一则。文。题。每个人都是一扇窗。作。者。田。野。语文知识积累。好词。碧野飞花。伤天暮景。惨淡愁云。和风徐徐。春意盎然。热情洋溢。好句。和不同的人交往,就像打开一扇不同的窗子。然而,就像蜜蜂永远迷恋花丛,就像花儿永远期待春光。我们每个人都希望结识一个优秀的朋友,...

英语阅读笔记

考研英语阅读笔记。第一,扫描提干,划关键项。第二,通读全文,抓住中心。1.通读全文,抓两个重点 首段 中心句 核心概念常在第一段,常在首段出题 其他各段的段首和段尾句。其他部分略读,有重点的读 2.抓住中心,用一分半时间思考3个问题 文章叙述的主要内容是什么?文章中有无提到核心概念?作者的大致态度是...

阅读笔记格式

判断 文章结构类型,给出判断方法。标记 3.态度。4.事物之间的关系。5.事物的缺陷。句。7.列举。8.强对比。9.专有名词首次出现的句子。10.与文章密切相关的词汇。详读 1.标记的地方。2.让步句 强调句后面的转折。3.出现be driven to,purpose of等固定短语的句子。4.特殊...