一些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
运行这两个时,第二个程序需要更多时间。这意味着指针的使用比数组索引方法花费更多的时间。
你能用这些简单的程序向我解释这是如何工作的吗?
答案 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添加索引。