LostDog。 2020-01-31 11:34 采纳率: 100%
浏览 224
已采纳

关于C语言指针和被调函数内存的问题

各位大佬我有一个关于C语言的问题想问一下,代码如下:

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


int fun(int** q)
{
    int s=1000;
    *q = &s;
    return 0;
}

int main()
{
    int* p;
    fun(&p);
    //指针变量初始化必须指向一个变量的地址,而不是指向一个常量
    printf("%d\n", *p);

}

这段代码最后输出1000,说明*p=s,p指向了s。dan我看到别人的博客说一个变量的内存生命周期在函数结束后释放,那么fun()函数中的s变量在函数
fun()调用完毕后不就释放了,那么为什么p指针这里还是能指向s?

  • 写回答

2条回答 默认 最新

  • Kim_小星兴 2020-01-31 11:44
    关注

    首先我们要了解栈这一数据结构,(**先进后出**)

    然后在程序中由硬件管理的栈并不会真正的释放内存,仅仅是把栈顶指针下移了而已,而下一次直接重写

    因此这里打印出1000仅仅是因为你没有重写这个值,你可以再写一个fun2,里面定义一个int s2 = 500;之后返回;

    打印出来就是500啦;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 2月18日

悬赏问题

  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思