21. 数组下标
C++中,数组下标的正确类型为 size_t
22. void*指针
Void*指针支持的操作:与另一个指针比较;向函数传递或者从函数返回;给另一个void*指正赋值。
特别的,不允许使用void*指针操纵它所指向的对象。
23. 指针和引用
两个区别:引用总指向某一个对象:定义时没有初始化是错误的;赋值行为差异:给引用赋值修改的是该引用所关联的对象的值。
24. 指针和const限定符
const int *p; 指向的对象是const的;不能把const对象赋值给一个普通指针,允许把非const对象赋值给指向const对象的指针。也可写为 int const *p。 底层const。int *const p; 指针为const的。 顶层const.
特殊的:typedef
typedef string *pString;
const pString p;
此时相当于:string *const p; //此处的const是限定指针的,而不能简单的进行字面扩展。
25. 位操作符
<<(左移):在右边补0>>(右移):无符号数,左边补0,有符号数则需要依具体情况而定。
移位的右操作数不可以是负数,而且必须是小于左操作数位数的值,否则,操作未定义。
26. 自增和自减操作符
只有在必要时才使用后置的自增或者自减操作符。后置方式需要先保存原来值。
27. sizeof操作符
将sizeof应用于表达式上,将获得该表达式的结果的类型长度,并不计算表达式的值。对char类型或者值为char类型的表达式做sizeof操作保证得1。
对引用类型求sizeof将返回存放此引用类型对象所需得内存空间大小。
对指针做sizeof将返回指针所需要的内存大小,对指针解引用返回对象所需内存大小。
对数组做sizeof等效于类型乘以个数。
28. 异常
throw表达式:抛出异常throw runtime_error(“….”); //抛出标准异常
try{
//抛出异常}
catch(runtime_error err)
{ cout<<err.what()<<endl;} //输出异常信息
29. 标准异常
1) exception头文件定义了常见的异常类,类名为exception2) stdexcept头文件定义了几种常见的异常类,包括:
exception:最常见问题
runtime_error:运行时错误
rang_error:越界
overflow_error:计算上溢
underflow_error:计算下溢
……
30. 数组形参
直接用数组名传递的是指向数组第一个元素的指针,当不能修改数组元素时声明为指向const对象指针。const int*
特别的:通过引用传递数组
形参是数组的引用,编译器不会将数组实参转化为指针,此时编译器将检查实参大小和形参是否匹配。
写法 void fun(int (arry&) [10]); //括号必须,下标操作符有更高优先级