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

为何以下C语言指针代码的输出为1000而非10?

为什么这段代码的输出是1000而非10?

别着急,咱们一步步拆解这段代码里的指针操作,你就能瞬间明白原因了:

首先先把你的代码贴出来方便对照:

#include<stdio.h>
int y;
void main() {
    int x, *px, **ppx;
    x = 10;
    y = 1000;
    px = &x;
    ppx = &px;
    f3(ppx);
    printf("%d", *px);
}
void f3(int **pp) {
    *pp = &y;
}

核心原因一句话总结:

f3函数修改了px指针本身的指向——让它从原本指向局部变量x,变成了指向全局变量y,所以最后*px取的是y的值1000。

逐行拆解执行流程:

  1. 全局变量y先被声明,默认初始值为0,之后在主函数里被赋值为1000。
  2. 主函数里:
    • x = 10:局部变量x存储值10。
    • px = &x:px是一个int*类型的指针,现在它被赋值为x的地址,也就是说px指向x,此时*px的结果是10。
    • ppx = &px:ppx是一个int**类型的指针(指针的指针),它被赋值为px的地址,也就是ppx指向px这个指针本身。
  3. 调用f3(ppx):把ppx的值(也就是px的地址)传给f3的参数pp(同样是int**类型)。
    • 在f3函数里,*pp = &y这行是关键:*pp表示pp指向的那个变量——也就是主函数里的px指针本身!所以这行代码的意思是:把全局变量y的地址赋值给px。
    • 到这里,px的指向已经完全变了:它不再指向x,而是指向y了。
  4. 回到主函数执行printf("%d", *px):此时*px是取px当前指向的变量的值,也就是y的1000,所以输出结果自然是1000。

额外补充:

如果你想让输出是10,那f3里应该修改的是px指向的变量的值,而不是px本身的指向。比如把f3改成这样:

void f3(int **pp) {
    **pp = 20; // 这会把x的值改成20,最后输出20
}

或者如果要修改x的值,直接传px进去也行,但这里用指针的指针就是为了修改指针本身的指向~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:32:20