You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中字符串循环的计数器与指针实现性能对比

计数器遍历 vs 指针遍历:哪种C语言字符串遍历性能更优?

先给结论:在现代编译器的优化下,这两种写法的性能完全没差别,甚至会被编译成一模一样的机器码。

具体原因:

  • 编译器会自动抹平差异:主流编译器(GCC、Clang、MSVC这些)的优化能力很强,计数器版本里的str[i]本质是*(str + i),编译器一眼就能看出这是连续的内存访问,会直接把它转换成指针递增的逻辑,和你手写的指针版本完全一致。
  • 底层指令完全相同:以x86架构为例,两种写法最终生成的机器指令都是:从字符串的基地址开始,每次读一个字节,然后地址寄存器自增,直到碰到终止符\0。计数器版本里的i递增和地址计算步骤,会被编译器直接优化掉,不会多做任何无用功。
  • 老旧编译器的极端情况(几乎不用考虑):如果是几十年前那种没有优化能力的古董编译器,指针版本可能会略快一点——因为它不需要每次计算str + i的地址,直接指针自增就行。但这种场景现在基本碰不到了。

你提供的两段代码:

计数器实现

const char str[] = "Hello World!";

for (unsigned short i = 0; str[i]; i++) {
  char c = str[i];
}

指针实现

const char str[] = "Hello World!";

for (const char* i = str; *i; i++) {
  char c = *i;
}

内容的提问来源于stack exchange,提问作者M 027

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:05:54