====== 无效指针的特例 ======
无效指针(invalid pointer)是值不为NULL,但并没有引用一个有效的对象或函数的指针。
任何使用无效指针的操作结果都是未定义的(undefined),可能导致运行时错误(run-time error),保证指针有效性是程序员的责任。
唯一的例外与数组有关:C标准规定了数组最后一个元素之后的那个地址是被定义的,虽然该地址同样是无效的,但可以使用该地址进行一些指针运算。
比如,我们常用的遍历数组代码:
int array[N];
int *p;
for (p = array; p < &array[N]; p++) {
...
}
这里&array[N]是无效的(数组最后一个元素地址是&array[N-1])。
更具体的说,指针p与整数k的算术运算p+k或p-k,p必须在上述的数组地址定义范围内(&array[0]~&array[N]),结果指针也必须在该范围内,计算才有意义,否则结果是未定义的(undefined)。
同样,两个指针p和q也必须在上述的同一个数组地址定义范围内,他们的减法p-q才是有意义的。
对于两个指针p和q的关系比较如pC语言}}