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吗?
不管使用哪种特定的C实现,都可以保证它始终有效吗?
可以安全地说
thing >= thingsBottom吗?
不,不是无条件的。
您的方法的问题在于,它会产生未定义的行为来计算指针值,该值将在该指针所基于的数组的开始之前,并且指针比较仅对进入或刚刚结束指针的指针有效。相同的数组。“仅在开始之前”没有任何特殊状态或规定。
您可以编写这样的循环;您只需要在递减之前进行测试:
for (Thing* thing = thingsTop; thing > thingsBottom; ) {
thing--;
doSomething(*thing);
}
Run Code Online (Sandbox Code Playgroud)