跨函数使用内存
来源:互联网 发布:乐视如何查看mac码 编辑:程序博客网 时间:2024/05/01 23:22
首先要说的是,只有动态分配的内存可以跨函数使用,静态分配的内存是不可以跨函数使用的
下面举个例子(静态变量不能跨函数使用)
例1:
# include <stdio.h>void f(int ** q) //3行 {int i = 5;*q = &i; // 6行 }int main(void){int *p; //11行f(&p); //13行printf("%d\n", *p); //14行 return 0;}
输出结果为:
在第3行,q是个指针变量,无论q是什么类型的指针变量,都只占4个字节,
在f函数中,*q等价于p q和**q都不等价于p
*q = i; //error 因为*q = i; 等价于 p = i; 这样写是错误的
第6行的语句等价于p = &i;
至于第14行语句,语法虽然没有问题,但逻辑上有问题,因为*p本身等价于i,而i属于f函数,所以在13行f函数被调用后,其所占有的内存被释放了,此时i已经不存在了,当然,p仍可以保存i的地址,但p不能访问i的空间,但最终还是输出了这个值5,所以说这个语句语法虽然没有问题,但逻辑上有问题。
下边两个是在VS2005和gcc下的情况,结果该程序都通过了编译
VS2005下——
gcc下——
下面举一个动态内存跨函数使用内存的例子
例2:
# include <stdio.h># include <malloc.h>void f(int ** q){*q = (int *)malloc(sizeof(int)); //6行**q = 5;}int main(void){int * p;f(&p);printf("%d\n", *p);return 0;}
输出结果为:
第6行,*q也等价于p
而这一行的 sizeof(数据类型) 表示 返回值是该数据类型所占的字节数
【所有代码均在windows系统下VC++6.0下运行通过】
(如有错误,敬请指正)
0 0
- 跨函数使用内存
- 跨函数使用内存
- 跨函数使用内存
- 跨函数使用内存问题
- 跨函数使用内存,动态实现
- C语言 跨函数使用内存.
- 静态内存不能跨函数使用
- 静态变量不能跨函数使用内存
- 动态变量可以跨函数使用内存
- 动态内存可以跨函数使用
- C语言:跨函数使用内存
- 使用虚函数节省内存
- C语言学习笔记(19跨函数使用内存)
- 06-数据结构_预备知识-跨函数使用内存
- 补.从零开始学习C语言--跨函数使用内存
- (四)malloc动态内存分配以及跨函数使用内存
- 显示程序使用最大内存函数
- (内存共享)shmat函数的使用
- 正则表达式的使用--去除字符串中空格
- Least Common Multiple
- 百思模组商城 - WWW.BESTMODULE.COM
- C++程序设计项目开发——银行自动提款机(一)
- Benchmark of Python WSGI Servers
- 跨函数使用内存
- blog
- 24.贱啊
- Goldbach's Conjecture
- perl模块之Smart::Comments
- iOS7 UIKit Dynamics
- hdu 1394 Minimum Inversion Number_归并排序
- 游戏对象的实现
- 从AndroidManifest.xml中获取已注册Activity的方法