4.3.1 . 创建动态数组
int *pia = new int[10];
用 new 动态创建长度为 0 的数组时,new 返回有效的非零指针。该指针与 new 返回的其他指针不同,不能进行解引用操作,因为它毕竟没有指向任何元素。而允许的操作包括:比较运算,因此该指针能在循环中使用;在该指针上加(减)0;或者减去本身,得 0 值。
delete [] pia;
在关键字 delete 和指针之间的空方括号对是必不可少的:它告诉编译器该指针指向的是自由存储区中的数组,而并非单个对象。
与普通数组一样,使用多维数组名时,实际上将其自动转换为指向该数组第一个元素的指针。
在下面的声明中,圆括号是必不可少的:
int *ip[4]; // array of pointers to int
int (*ip)[4]; // pointer to an array of 4 ints
08.6.26
可以指向任何非 const 对象的指针类型。void* 指针只提供有限的几种操作:可用作函数形参类型或返回类型,也可与其他指针做比较操作,但是不能进行解引用操作。
如果两个操作数都是负数,除法操作的结果为正数(或零),而求模操作的结果则为负数(或零);
如果只有一个操作数为负数,这两种操作的结果取决于机器;求模结果的符号也取决于机器,而除法操作的值则是负数(或零):
expr && expr
expr || expr
逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数。只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数。我们常常称这种求值策略为“短路求值(short-circuit evaluation)”。
位操作符操纵的整数的类型可以是有符号的也可以是无符号的。如果操作数为负数,则位操作符如何处理其操作数的符号位依赖于机器。于是它们的应用可能不同:在一个应用环境中实现的程序可能无法用于另一应用环境。
位与操作(&)需要两个整型操作数,在每个位的位置,如果两个操作数对应的位都为 1,则操作结果中该位为 1,否则为 0。
& | bitwise AND(位与) | expr1 & expr2 |
^ | bitwise XOR(位异或) | expr1 ^ expr2 |
| | bitwise OR(位或) | expr1 | expr2 |
由于后自增操作的优先级高于解引用操作,因此 *iter++ 等效于 *(iter++)。