====== 无效指针的特例 ====== 无效指针(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语言}}