我怎样才能最好地遍历C数组?用指针还是索引?

Fab*_*ian 2 c performance pointers

我经常看到人们使用指针迭代C样式数组,而我发现使用索引更具可读性.下面的例子说明了我想到的两种方式.它们不会导致相同的拆卸......

我的问题:使用"跑步者"而不是索引是否有利?顺便问一下,"跑步者"技术还有另一个名字吗?

它是否依赖于底层类型,例如int,char或struct?

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;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 5

无论使用整数索引还是指针都无关紧要.但是,您提供的两个示例都不遵循C(或C++)中的标准做法.这是一个重写:

// way 1: runner
for (somestruct * pRunner = myarray; pRunner != pEnd; ++pRunner)

// way 2: index
for (size_t ui = 0; ui < uiSize; ++ui)
Run Code Online (Sandbox Code Playgroud)

当简单地迭代容器的所有元素时,我们总是使用for循环,而不是while循环,因为它更简洁和惯用(意味着每个人都这样做,所以每个人都可以快速阅读它).