静态内存不能跨函数使用

声明:本文参考郝斌老师的 C 语言自学视频。

本人是 C 语言的初学者,学习的资料来自郝斌老师的 C 语言视频教程。在学习的过程中做了些笔记,为了便于以后的复习也为了和大家共同学习。


上面的程序的运行结果是:

解释一下本程序:




在 main() 函数中,程序将 地址变量 P 的地址发送给了f() 函数。因为变量 q 是 int ** 型的变量,所以,*q 等价于变量 p 的内容,即 *q = p。语句 *q = &i , 所代表的意义就是将变量 i 的地址发送给了地址变量 p, 而最后 

printf("%d\n", *p) 这个语句要输出的 *p 则等价于变量 i 的内容了,所以,最后的输出结果是变量的内容 5 。


最后需要指出的是这个程序在语法上是没有问题的,但在逻辑上存在错误,原因如下:

系统为函数 f() 和函数 main() 分配的内存都是静态的,会在函数运行结束自动由系统将内存释放。问题就出在 main() 函数的 printf 语句,因为在语句 f(&p) 执行之后,f() 函数所分配的内存都已经被释放掉了,所以指针变量 P 所指向的变量 i 已经被释放了,也即变量 i 所在位置的变量已经不存在了。这也是为什么静态内存不能跨函数使用的原因。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值