缘起: 在 C 语言编程中,经常需要对数组进行遍历操作。
通常有两种常见的方式:一种是使用索引进行遍历,另一种是使用指针进行遍历。
本文将聚焦于比较这两种方式的效率差异,并阐述为什么指针遍历方式在大多数情况下更高效。
+++
首先看个例子吧:
EfficiencyOfCodeExecution.c
/**************************************************** | |
* file : EfficiencyOfCodeExecution.c | |
****************************************************/ | |
#include "stdio.h" | |
/**************************************************** | |
* Global Type Declaration | |
****************************************************/ | |
typedef struct { | |
int a; | |
char b; | |
int c; | |
} foo_struct; | |
/**************************************************** | |
* Global Function Implement | |
****************************************************/ | |
int main(void){ | |
/* 1. 声明结构体数组 */ | |
foo_struct foo[10]; | |
/* 2. 第一种遍历方式 */ | |
int i; | |
for(i=0;i<10;i++){ | |
foo[i].a=77; | |
foo[i].b=88; | |
foo[i].c=99; | |
} | |
/* 3. 第二种遍历方式 */ | |
foo_struct *fp; | |
foo_struct *fend; | |
fend = foo + 10; | |
for(fp=foo;fp!=fend;++fp){ | |
fp->a = 77; | |
fp->b = 88; | |
fp->c = 99; | |
} | |
while(1){ | |
} | |
return 0; | |
} | |
/**************************************************** | |
* file : EfficiencyOfCodeExecution.c end! | |
****************************************************/ |
上述的第二种指针的方式又高级又效率!
主打一个高级感🚎
还不用起来🎀
那 为什么呢?
索引遍历方式需要通过索引值来访问数组元素。每次迭代都需要进行索引值的计算,然后根据索引值进行内存地址的访问。
这涉及到了额外的计算操作,增加了代码的复杂度和执行时间。
相比之下,指针遍历方式直接通过指针进行内存地址的访问,无需进行额外的索引计算。
指针递增操作由编译器自动完成,减少了不必要的计算开销。
这使得指针遍历方式能够更快速地访问数组元素,提高了代码的执行效率。
当然啦!这也不是绝对滴,在某些特殊情况下,索引遍历方式可能会更适合。
例如,需要随机访问数组元素或具有特定的索引模式时,索引遍历方式可能更具优势。
学会了嘛😜
谢谢可爱的你能看到最后呢!
爱你呀😍