我正在阅读K&R中有关数组运算的部分,并发现了一些奇怪的东西。我为了方便理解,贴出了整个段落,但我主要关注加粗部分。
如果p和q指向同一数组的成员,则诸如==、!=、<、>=等关系将正常工作。例如,如果p指向比q更早的数组成员,则p < q为真。任何指针都可以与零进行有意义的相等或不相等比较。但对于不指向同一数组的指针进行算术或比较的行为是未定义的。(有一个例外: 可以在指针算术中使用超出数组末尾的第一个元素的地址)。
这个例外的原因是什么?在定义它们的大小时,是否为任何数组分配了额外的内存空间?如果是,是为了什么目的?它是用来结束数组并添加一个空字符吗?
如果p和q指向同一数组的成员,则诸如==、!=、<、>=等关系将正常工作。例如,如果p指向比q更早的数组成员,则p < q为真。任何指针都可以与零进行有意义的相等或不相等比较。但对于不指向同一数组的指针进行算术或比较的行为是未定义的。(有一个例外: 可以在指针算术中使用超出数组末尾的第一个元素的地址)。
这个例外的原因是什么?在定义它们的大小时,是否为任何数组分配了额外的内存空间?如果是,是为了什么目的?它是用来结束数组并添加一个空字符吗?