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

C语言while循环中*str指针遍历与str[]下标遍历字符串是否等价

C语言两种字符串遍历写法的效果对比

两种写法的核心遍历逻辑、终止判定、遍历覆盖范围完全一致,都能正确逐字符读取直到碰到字符串结束符'\0'停止,不存在功能上的对错差异。

两种写法的具体逻辑拆解

指针自增遍历写法

char *str = "Hello";
while (*str)
{
     str++;
}
  • 直接操作指针变量str:每次循环先取当前str指向位置的字符,判断其值是否为0(也就是'\0'),非0就将指针向后移动1个char单位,指向下一个字符。
  • 循环结束后str会指向字符串末尾的'\0'位置,不再保留原字符串的起始地址。

数组下标遍历写法

char *str = "Hello";
int i = 0;
while (str[i] != '\0')
{
    i++;
}
  • C语言标准明确规定,下标运算str[i]完全等价于*(str + i),本质是计算起始地址偏移i个位置后的内存取值,判断该位置字符是否为'\0',不是就将偏移量i自增。
  • 循环结束后str仍然指向字符串起始地址,变量i的值等于字符串不含结束符的有效长度(示例中值为5,对应"Hello"的字符长度)。

唯一的实际差异

两种写法遍历过程中修改的变量不同:前者改动了原指针str的指向,后者没有改动原指针,仅修改独立的计数变量i。如果循环结束后你还需要用str访问字符串起始位置,第一种写法需要提前保存原起始地址,第二种写法则不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:03:27