静态内存不能跨函数使用

来源:互联网 发布:广东管理网络干部学院 编辑:程序博客网 时间:2024/05/02 01:21

声明:本文参考郝斌老师的 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
原创粉丝点击