我正在阅读 K&R 中有关数组算术的部分,并发现了一些奇怪的东西。我发布了整个段落以了解上下文,但我主要关注粗体部分。
如果 p 和 q 指向同一个数组的成员,则关系如 ==,
!=、= 等都可以正常工作。例如,如果 p 点,则 p (有一个例外:
可以使用数组末尾之后的第一个元素的地址
在指针算术中。)
这个异常的原因是什么?当定义数组大小时,是否会在数组末尾分配额外的内存?如果是这样,目的是什么?是不是以空字符结束数组呢?
原因是您可以在循环中增加指针,如下所示:
char a[42], *p;
for (p = a; p < &a[sizeof a]; p++) // or p != &a[sizeof a]
{
/* ... */
}
如果没有额外的规则,这将是未定义的行为,因为指针将无效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)