指针访问方法比数组索引更快?

时间:2014-10-08 07:38:52

标签: c arrays pointers

一些C书作者说通过指针访问数组值比通过数组索引更快。但这是真的吗? 以下是我为了解这个概念而编写的两个程序。

main()
{
    int arr[100000],*ptr,c,i;
    ptr=arr;
    for(i=0;i<100000;i++)
      arr[i]=i;
    for(i=0;i<100000;i++)
      c = arr[i];
}

main()
{
    int arr[100000],*ptr,c,i;
    ptr=arr;
    for(i=0;i<100000;i++)
      *(ptr+i)=i;
    for(i=0;i<100000;i++)
      c = *(ptr+i);
}

当我用time ./a.out运行这两个时,第二个程序需要更多时间。这意味着指针的使用比数组索引方法花费更多的时间。 你能用这些简单的程序向我解释这是如何工作的吗?

2 个答案:

答案 0 :(得分:2)

你的&#34;指针访问&#34;不是预期的,更快的方式。

你只是做与索引相同的事情,请记住在C中的表达式

A[i]

相当于

*(A + i)

所以,你的第二个循环只是手动表示数组索引,这是没有意义的。

应该是:

int main(void)
{
    int arr[100000], *ptr, *end, c;
    for(ptr = arr, end = arr + sizeof arr / sizeof *arr, i = 0;
        ptr != end; ++i)
    {
      *ptr++ = i;
    }
    for(ptr = arr; ptr != end; )
      c = *ptr++;
    return 0;
}

或者其他什么。仍然无法保证这更快,但至少它会尝试减少操作。

答案 1 :(得分:0)

这是一样的。 Operator []只是为数组begin添加索引。