我正在阅读 K&R 中关于数组算术的部分,并遇到了一些奇怪的事情。我发布了整段的上下文,但我主要关注粗体部分。
如果 p 和 q 指向同一个数组的成员,则 ==、!=、<、>= 等关系可以正常工作。例如,如果 p 指向数组中比 q 更早的成员,则 p < q 为真。任何指针都可以有意义地比较是否等于或不等于零。但是对于算术或与不指向同一数组成员的指针的比较,行为是未定义的。(有一个例外:数组末尾之后的第一个元素的地址可用于指针算术。)
这个异常的原因是什么?定义数组大小时,是否将额外的内存分配给任何数组的末尾?如果是这样,出于什么目的?是否以空字符结束数组?