xiaojin093 2025-10-16 18:12 采纳率: 15.6%
浏览 7

通过二级指针获取临时变量地址


#include <stdio.h>

void getpoint(int **p)
{
    int b = 4321;
    *p = &b;
}

int main()
{
    int a = 1234;
    int *p = &a;
    
    printf("%d\n",*p);
    
    getpoint(&p);
    
    printf("%d\n",*p);
    
}

getpoint函数中获取b变量的地址是否有问题?

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-10-16 18:12
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    你想通过二级指针获取临时变量的地址,但是在 C 语言中,临时变量的地址是无法获取的,因为临时变量在栈帧中分配内存,栈帧在函数调用结束后会被销毁,临时变量的地址也就失效了。

    解决方案

    你可以通过以下方法来实现:

    #include <stdio.h>
    
    void getpoint(int **p)
    {
        int b = 4321;
        *p = malloc(sizeof(int));
        **p = b;
    }
    
    int main()
    {
        int *p;
        getpoint(&p);
        printf("%d\n", *p);
        free(p);
        return 0;
    }
    

    在上面的代码中,我们通过 malloc 分配内存来创建一个临时变量的地址,然后将临时变量的值赋给该地址。这样我们就可以通过 p 来访问临时变量的值了。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月16日