待处理。
跳过了位运算的章节
跳过了try语句块和异常处理
含有可变形参的函数 p197
返回数组的指针 p205
参数最佳匹配 p219
-------
对象名存储在哪儿
----------------------------------------------------------------------------------------------------------------
一些零散,即时的知识点
上面的部分是问题,下面的部分是回答
一些重要概念:
- 一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算 p3
- c++ 每个数据项都有其类型 p14
- c++ 程序中的每个名字都要先声明后使用 p14
- c++ 最初的一个设计焦点就是能定义使用上像内置类型一样自然的类类型 p17
【第二章】
- 两种基本数据类型。算数类型分为两类。一个char的大小和一个机器字节一样。p30
- 当明确知晓数值不可能为负时,选用无符号类型。执行浮点运算选用double。p32
- 程序应该尽量避免依赖于实现环境的行为 p33
- 有符号数和无符号数相加减时,会自动转换成无符号数。p34
- 对象是具有某种数据类型的内存空间 p39
- 初始化不是赋值 p39
- 定义于任何函数体之外的变量被初始化为0,定义在函数体内部的内置类型变量将不被初始化,一个未被初始化的变量的值是未定义的。建议初始化每一个内置类型的变量。 p40 【int i 确实是这样,但是int *i却反过来了,和编译器有关?】
- 声明和定义的区别非常重要 p41
- 面对一条比较复杂的指针或引用声明语句时,从右往左阅读有助于理解 p53
- 存在数组的引用,不存在引用的数组
- 头文件不应该包含using声明 p75
- 不是所有的标准库都定义了<,但是都定义了== 和 !=,因此养成使用迭代器和!=的习惯,就可以不用在意使用的到底是哪种容器类型了。 p97
- 当数组或其他类似数据结构的下标越界并试图访问非法内存区域时,就会产生此类错误 p104
- 标准库类型限定使用的下标必须是无符号类型,而内置的下标运算无此要求(然而我用codeblocks的时候并没有此要求)p108
- 字符串字面值是一种通用结构的实例,这种结构是C++由C继承而来的C风格字符串 p109
- 对于大多数应用来说,使用标准库string要比使用C风格字符串更安全,更高效 p110
- 任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代。反过来不可行 p111
- 关系运算符的求值结果是布尔值,所以将几个关系运算符连写在一起会产生意想不到的结果 p127
- 如果两种类型可以相互转换,那么它们就是关联的 p141
- 在switch中,即时不准备在default标签下做任何工作,定义一个default标签也是有用的。 p163
- 函数是一个命名了的代码块,我们通过调用函数执行相应的代码 p182
- 善用引用,且尽量使用常量引用 p192 【但是函数形参int i不是const的也能正常编译,指针却不行,是编译器做了隐式处理吗?】
- 不要返回局部对象的引用或者指针 p201
- 返回引用时,函数是一个左值,可以赋值 p202
- 顶层const修饰的形参和普通形参时不能重载,底层const修饰的能重载
Q:
- 一个函数的定义包含几部分 p3
- 什么是内置类型 p2
- c++ 是什么数据类型的语言 p28
- 编程语言是通过哪两方面来扩充语言的基本特征 p29
- 算数类型分为两类 p30 【指针是什么算数类型】
- 一个字节为8比特,字为32比特的机器上,一个字的内存区域是什么形式的 p31
- 如果要在多个文件中使用同一个变量,就必须将声明和定义分离,怎么做到 p41
- 怎么进行extren的声明和定义 p41
- 指向指针的引用怎么定义 p52
- constexpr int sz = size() 这条语句在什么情况下是正确时 p59
- constexpr 修饰的对象必须要初始化, constexpr修饰的指针,和const 修饰的指针差异 p60
- 两种类型别名 p60
- decltype(*p), decltype(p), decltype(());分别代表什么意思 p64
- string的四种初始化方式 p76
- vector<T>的初始化方式,和赋值方式 p87 and p91
- int *p[10], int (*p)[10]有什么区别 p102
- int &p[10], int (&p)[10]有什么区别 p102
- int *(&q)[10] 是什么意思 p103
- --i和i--的区别 p132
- switch中跳过一个定义为什么会出错,又怎么解决 p163
- 函数的调用完成两项工作 p182
- 内置类型的局部静态变量初始化为什么 p
- 函数参数的两种传递分别是什么 p187
- 数组的两个特殊性质 p193
- 传递数组的三种形参方式 p193
- 管理指针形参有三种常用技术 p194
- 数组的引用,怎么传递任意大小 p195
- 如果返回局部对象的引用或指针,什么情况下会出大问题 p201
- 怎么声明一个返回数组指针的函数 p205
- 函数的指针和返回值为指针的函数区别 p221
- 函数的指针在实用中加*和不加*,加&和不加&有什么区别 p221
- 返回指向函数的指针 p223
A:
- 返回值,函数名,形参列表,函数主体
- 语言自身定义的类型
- 静态数据类型语言
- 一是赋予程序员自定义数据类型的权利;二是将一些有用的功能封装成库函数提供给程序员
- 整形(包括字符和布尔类型在内) 和浮点型
- 前者为8进制,后者为十进制
- 变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其声明,却绝对不能重复定义。
- 声明在.h文件中,定义在.c文件中.
- int *p; int *&r = p;
- constexpr 修饰size()的情况下
- 一个是指向整型的常量指针,一个是指向整型常量的指针。
- typedef 和 using
- 引用,指针,引用
- 默认初始化,直接初始化(两种),拷贝初始化(两种),还有一种初始化为由连续n个字符组成的串
- 见书
- 10个指针,指向10个整数;一个指针,指向维度为10的数组
- 不存在引用的数组;一个引用,指向维度为10的数组
- q是数组的引用,该数组含有10个指针
- --i避免了不必要的工作,它把值加1后直接返回改变了的运算对象;i--需要将原始值存储下来以便于返回这个未修改的内容
- 因为从switch跳到某个变量的定义之后,那么这个定义就被忽略掉了,这是不允许的(但是可以忽略声明);可以用语句块来解决
- 一是用实参初始化函数对应的形参,二是将控制权转移给被调用函数
- 0
- 引用传递和值传递
- 一,不允许拷贝数组;二,使用数组(通常)会将其转换成指针
- int *i; int i[]; int i[10]
- 使用标记指定数组长度(string);使用标准库规范(begin(), end());显式传递一个表示数组大小的形参
- 详细看p578
- 当返回的是一个必须要有结束符(例子string)结束的引用或者指针时,就会出问题,因为那块已经释放了的区域已经没有结束符,会一直指下去,直到出错。
- 看书
- int (*q)()——函数的指针;int *q()——返回值为指针的函数。
- 没区别
- 看书