c - 如何最好地迭代 C 数组?使用指针还是索引?

标签 c performance pointers

我经常看到人们使用指针迭代 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/

相关文章:

c - 在 C 数组中进行按位运算的最有效方法是什么

javascript - 如何在 node.js 中存储和修改大型数据集?

ruby - 使用 Ruby 进行高性能计算?

c - 用于 uart 的 linux 驱动程序-总体设计

c - OpenCL 1.2 使用有效内核给出 -9999 错误

c - 结构指针算子猜想(理论)

c - 简单的 C 双指针

c - 是否可以在执行期间永久更改指针类型? (C语言编程)

mysql - 检查插入数据的完整性 - sqlite3

c - 直接函数调用是否比回调函数调用执行得更快?