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

为什么循环中变量i的地址&i始终保持不变?

为什么循环中变量i的地址&i始终保持不变?

嗨,我来给你把这个事儿说透!你代码里的这个现象太正常了,完全不是bug,咱们一点点捋清楚:

首先,你在for循环的初始化部分声明了int i = 0,这个变量i的生命周期和存储位置是固定的:

  • 当程序运行到这个for循环时,系统会在栈内存里给i分配一块固定的小空间——就像你在书桌角落给它占了个专属小格子,从循环开始到结束,这个格子都不会被挪走也不会被回收。
  • 循环的每一次迭代,只是把i的值更新了(从0变成1,再变成2...),但从头到尾用的都是同一个i变量,不是每次循环都重新创建一个新的i。那你每次取它的地址,自然都是同一个位置啦!

打个生活化的比方:你每天用同一个马克杯喝水,每次倒的水不一样(对应i的值变化),但马克杯一直放在桌子的同一个地方(对应i的地址),从来没动过——是不是一下子就懂了?

再给你补个小知识点:如果你在循环体内部声明一个新变量,比如:

for(int i = 0; i<4; i++){
    int temp = i;
    printf("temp: %d\n", temp);
    printf("&temp: %p\n", &temp);
}

这时候你可能会发现temp的地址也大概率不变,这是因为编译器会做优化,重复利用栈上的同一块空间,但本质上temp是每次进入循环分配、退出释放的,只是实际运行时被优化了。但你的代码里的i是属于整个循环的变量,从一开始就固定了位置,所以地址肯定不会变。

总之,你完全不用疑惑,这就是C语言里局部变量(栈变量)的正常行为哦!

备注:内容来源于stack exchange,提问作者Ariel Marcelo Pardo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 08:38:04