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

能否将指针的地址/位置作为for循环的终止条件?

问题根本原因

  • 你的循环终止条件逻辑存在错误:ptr < ptr + 3 中,判断两侧的ptr都是当前循环迭代的最新值。每次循环执行ptr++后,ptr + 3也会同步向后偏移1个int类型的长度,这个判断永远为真,因此程序会进入无限循环,直到指针越界访问非法内存触发崩溃。
  • 补充说明:你代码注释中对calloc的理解是正确的,calloc(5, sizeof(int))确实会申请5个int长度的连续内存,且自动初始化为全0,返回指向这段内存首地址的int类型指针。

正确修改方案

你需要提前保存数组的起始地址作为固定基准,再和移动的指针做比较,修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int*) calloc(5, sizeof(int));
    int *start = ptr; // 保存数组起始地址作为固定基准

    for (int i=0; ptr < start + 3; ptr++, i++){
        // 如果你预期每个元素值都是1,直接写*ptr = 1即可
        // 你原来的写法*ptr = i+1 会输出1、2、3,和你的预期不符
        *ptr = 1;
        printf("value of %d element of ptr is: %d \n", i, *ptr);
    }
    // 申请的堆内存要记得释放,避免内存泄漏
    free(start);
    return 0;
}

运行上述代码就会输出你预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:27:04