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

通过指针修改变量值:指针如何改变i的值?为何i=200?

#include <stdio.h>
void functionx(int *ptr) {
    *ptr = *ptr + 100;
}
int main(void) {
    int i = 100;
    int *p = &i;
    printf("i = %d\n", i);
    functionx(p);
    printf("i = %d\n", i);
    return 0;
}
指针修改变量i的原理及结果分析
  • 指针是存储内存地址的变量
    在main函数里,int *p = &i;这行代码中,&i是取变量i的内存地址,把这个地址赋值给指针变量p后,p就相当于“指向”了i所在的内存单元。

  • 函数调用传递的是内存地址
    调用functionx(p)时,实际是把p存储的i的地址传给了函数形参ptr。此时ptr和p指向的是同一个内存位置——也就是i的存储地址。

  • 解引用操作直接操作目标内存
    在functionx里,*ptr是解引用运算符,作用是访问ptr指向的内存地址里的数据。
    执行*ptr = *ptr + 100;时,先通过*ptr取出该内存里的当前值(也就是i的初始值100),加100得到200后,再通过*ptr把200写回同一个内存地址。因为这个地址就是i的存储位置,所以i的值被直接修改。

  • 结果为200的原因
    初始时i的值是100,第一次printf输出100;经过functionx对i所在内存的修改后,i的值变成100+100=200,因此第二次printf输出200。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:10:01