测试指针之间的关系以进行迭代是否安全?

Avi*_*ohn 4 c iteration pointers

请考虑的数组Thing。这是一种堆栈。

它由指向thingsBottom,其空端由指向thingsTop

编辑:每次我想将某些内容推入列表时,我都会这样做*thingsTop = newThing; thingsTop++;

我想使用指针从头到尾进行迭代,如下所示:

for (Thing* thing = thingsTop - 1; thing >= thingsBottom; thing--) {
    doSomething(*thing);
}
Run Code Online (Sandbox Code Playgroud)

不管使用哪种特定的C实现,都可以保证它始终有效吗?

可以安全地说thing >= thingsBottom吗?

Joh*_*ger 5

不管使用哪种特定的C实现,都可以保证它始终有效吗?

可以安全地说thing >= thingsBottom吗?

不,不是无条件的。

您的方法的问题在于,它会产生未定义的行为来计算指针值,该值将在该指针所基于的数组的开始之前,并且指针比较仅对进入或刚刚结束指针的指针有效。相同的数组。“仅在开始之前”没有任何特殊状态或规定。

可以编写这样的循环;您只需要在递减之前进行测试:

for (Thing* thing = thingsTop; thing > thingsBottom; ) {
    thing--;
    doSomething(*thing);
}
Run Code Online (Sandbox Code Playgroud)