我经常看到人们使用指针迭代 C 风格的数组,而我发现使用索引更具可读性。下面的例子说明了我的两种思考方式。它们不会导致相同的反汇编...
我的问题:使用“运行者”而不是索引是否有利?顺便问一下,“运行者”技术还有其他名称吗?
它是否取决于基础类型,例如int、char 还是结构体?
struct somestruct
{
float f;
int i;
};
const unsigned int uiSize = 10000;
somestruct * myarray = new somestruct[uiSize];
const somestruct * const pEnd = myarray + uiSize;
// way 1: runner
somestruct * pRunner = myarray;
while(pRunner < pEnd)
{
pRunner->f += 5;
pRunner->i += 5;
++pRunner;
}
// way 2: index
unsigned int ui = 0;
for (ui = 0; ui < uiSize; ++ui)
{
myarray[ui].f += 6;
myarray[ui].i += 4;
}
最佳答案
使用整型索引还是指针并不重要。但是,您提供的两个示例都不遵循 C(或 C++)中的标准实践。这是一个重写:
// way 1: runner
for (somestruct * pRunner = myarray; pRunner != pEnd; ++pRunner)
// way 2: index
for (size_t ui = 0; ui < uiSize; ++ui)
当简单地迭代容器的所有元素时,我们总是使用 for
循环,而不是 while
循环,因为它更简洁和惯用(意味着每个人都这样做这样大家就可以快速阅读)。
关于c - 如何最好地迭代 C 数组?使用指针还是索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930426/