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

为何指针比较单独有效但for循环未执行?

问题分析与解决

你的循环被直接跳过,核心原因是初始循环条件不满足,和for循环的执行顺序逻辑有关,但不是顺序本身有问题,是你对条件的设计不符合遍历需求。

先明确for循环的执行流程:

  • 第一步:执行初始化语句(int i = 0)
  • 第二步:判断循环条件(&start[i] == end),条件为真才进入循环体;为假直接终止循环
  • 第三步:如果进入循环体,执行完后再执行递增语句(i++),然后回到第二步重新判断条件

看你的代码,初始i=0时,&start[0]就是arr[0]的地址,而end是arr[3]的地址,这时候条件&start[0] == end为假(你自己测试结果是0),所以循环直接跳过,根本不会执行任何循环体内容,也不会走到i递增的步骤。

你想要遍历从start到end(包含end指向的元素)的所有元素,需要把循环条件改成判断当前元素的地址未超过end,有两种常见写法:

写法1:用指针遍历(更符合C语言指针风格)

int arr[]={3, 2, 1, 1};
int *start = &arr[0];
int *end = &arr[3];
int sum = 0;

for (int *p = start; p <= end; p++) {
    sum += *p;
}

写法2:保留你的索引方式,修改条件

int arr[]={3, 2, 1, 1};
int *start = &arr[0];
int *end = &arr[3];
int sum = 0;

for (int i = 0; &start[i] <= end; i++) {
    sum += start[i];
}

修改后,初始i=0时&start[0] <= end为真,进入循环;直到i=3时,&start[3] == end,执行最后一次循环;i递增到4后,&start[4]超过end,条件为假,退出循环,这样就能遍历所有元素求和。

另外注意你的原始代码缺了分号,这在C语言里会导致编译错误,记得补上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:15:30