1.复制指针时只复制指针中的地址,而不会复制指针指向的对象
2.解决护栏柱错误的根本 是 从思想认知上搞定. 数组的序号为偏移量.
也即: 数组的第一个元素为arrName[0],其偏移量为0
3.使用strcpy函数时要注意,若是源串的长度大于目标串的长度,将会覆盖缓冲区后面的内容
所以尽量使用strncpy来替代strcpy
4.数组可以使一维或者是多维.只要数组包含的元素为内置类型或者有默认构造函数的类,就可以初始化
5.数学运算符有5个: +(加) -(减) *(乘) /(除) %(求模)
6.不同版本的语言标准,会出现不同的结果:拿除法来举个例子讲
C89 -22/7=-3;C11 -22/7=-4
7.对于除法,若是除数或者被除数当中有一个为浮点数,编译器将产生浮点商.
但是,此时若将结果赋值给一个整形左值,结果将会被截短
8.切记表达式都要有值
9.可以将每个表达式的值视为真或假.如果表达式结果为零,则返回false,否则返回true
10.一个简单的使用原则就是:new和delete、new[]和delete[]对应使用
11.使用delete常见的错误小结:
(1)delete的时候,系统会自动调用已分配的对象的析构函数(基本类型的释放由系统规定)
(2)delete[] 释放一块内存时,后面的指针应该指向此内存的首地址.
(3)自己分配的内存,做且仅做一次释放处理
12.再谈一次 关于基类与派生类的问题:
(1)至于为什么会有派生这一动作,最基本的原因就是公共部分都在基类中,派生类只是关注自己特殊的增量部分
派生的结果是派生类里面包含有基类里面的全部组成部分(BTY:只是由于private的限定而不能直接访问到而已)
(2)对于C++而言,只有public的派生才能把派生类的对象指针(或引用)赋值给基类的指针(或引用).private,protected均是不可以
对于Java 而言,由于不存在 派生分类,此条不成立
13.对于指针,其存储的地址以及存储的地址处的值进行区分至关重要. 不要把指针指向的地址与存储在地址处的值混为一谈
14.函数的原型由 类型+函数特征+';' 三部分构成.
类型 即为 返回值。函数特征 则由 函数名与参数列表 组成。发生函数重载是由于函数名相同而参数表列不同的结果.
15.关于const 对指针的修饰
理解这些声明的技巧在于:查看关键字const右边来确定什么被声明为常量.如果const右边是类型,则值是常量;若右边是指针变量,则指针本身为常量.示例代码:
const int* p1; //the int pointed to is constant
int* const p2; //p2 is constant,it cannot point to anything else
16.如果对象不应该被修改,则按引用传递它时应用const进行保护.
17.务必将指针设置为空,而不要让它未被初始化(悬浮).
18.不要使用已经被删除的指针.
19.不要将指针删除多次.
20.自由存储区(堆)中的对象在函数返回后仍然存在.
21.引用和其他变量的区别在于,声明引用的同时必须对其进行初始化
22.(使用指针或引用)按引用将参数传递给函数时,原始对象的地址而不是对象本身的内容被存储到堆栈中.
23.按值传递参数到函数时,会发生一次临时副本拷贝.同样,从函数返回对象时,也会发生一次副本拷贝.
24.按引用传入参数是尽量应该使用引用这种方式.从函数中返回自由存储区的对象时,尽量使用指针(若是使用引用有空引用的可能)