小小晓尔 2023-01-31 01:30 采纳率: 50%
浏览 41
已结题

输出的一模一样的printf结果不一致

想问一下为什么两个prinf输出的结果不一样,后面那个为0,并且除了第一个printf之后的所有都为0,为啥两个printf输出结果不都为23?求指教
int *g(void);
int main(){

int *p=g();
printf("%d\n",*p);
printf("%d\n",*p);

return 0;

}

int *g(void){
int i=23;
return &i;
}

img

  • 写回答

4条回答 默认 最新

  • 关注

    g()函数返回的是一个int类型的指针,这个指针指向了g()函数中的临时变量 i ,变量 i的作用域仅在g()函数内部起作用,在g()函数外面,变量 i所属的内存空间被回收变为空闲内存,也就可能会被分配给其它变量(可能是其它程序的变量),所以,在main()函数中就有可能出现两个不一样的结果。
    如果想要保持一致,在g()函数中需要手动申请内存,手动申请的内存,只有手动释放或者在程序结束后才会被系统回收,这时候在main函数中的值就是一致的。代码如下:

    int* g(void) {
        int *i = (int*)malloc(sizeof(int));
        *i = 23;
        return i;
    }
    
    

    运行结果:

    img

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

报告相同问题?

问题事件

  • 系统已结题 2月8日
  • 已采纳回答 1月31日
  • 创建了问题 1月31日

悬赏问题

  • ¥30 线性代数的问题,我真的忘了线代的知识了
  • ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
  • ¥188 需要修改一个工具,懂得汇编的人来。
  • ¥15 livecharts wpf piechart 属性
  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了