【黑马程序员】c语言的动态内存分配
来源:互联网 发布:超星尔雅网络登录页面 编辑:程序博客网 时间:2024/05/16 06:03
---------- IOS培训、java培训、期待与您交流! ----------
首先介绍c语言中最常使用的内存分配方式
//void *malloc(size_t size);
//泛型指针 可以赋给任何类型的指针变量
int main(int argc,const char * argv[]) {
char *p = malloc(1000);
p[0];//开辟第一个堆空间的第一个字节
p[1];//*(p+1)
if (p==NULL) {
perror("malloc error");
exit(-1);
}
p[0]='A';//堆空间的首地址存上了‘A’
free(p); //堆空间释放
return 0;
}而如果我们在方法里这样写
int * func(){
int a; //a 是在栈里面的
a=10;
return &a;
}
这样是不可以的。因为a是一个局部变量,func方法运行完后,就收回了a所在的栈空间;但是我们这样写
int * func(){
int a; //a 是在栈里面的
int *p1=malloc(4);
if (!p1) {
perror("malloc p1 error");
exit(-1);
}
return p1;
}
//这是可以的,因为p在堆里面。 堆空间不会随着func的消失而消失特别注意的是:
//栈空间 静态内存分配 编译时决定的
//堆空间 动态内存分配 运行时决定的
// 静态内存分配 大小编译时决定 编译器分配的 自动释放 栈数据 只读
// 动态内存分配 大小运行时决定 程序员分配的 手动释放的 堆段
-------------------------以下是静态内存分配----------------------------------
char buf[10001]; //不能灵活调整
int i=0;
while (i++<100) {
scanf("%s",buf);
printf("%s\n",buf);
可以看到,当我们要往char字符中存取一些数据,这样普通的做法,就显得太浪费。比如我们第一次输入1000个,之后99次每次都输入几个字符。这样子的做法就显示不够灵活。
--------------以下为动态内存分配---------------------
int main(int argc,const char * argv[]) {
int n;
int i=0;
while (i++<100) {
scanf("%d",&n);
char *buf = malloc(n+1);
if (!buf) {
perror("malloc error");
exit(-1);
}
scanf("%s",buf);
printf("%s\n",buf);
free(buf);
}
return 0;
}
- 黑马程序员--c语言动态内存分配
- 【黑马程序员】c语言的动态内存分配
- 黑马程序员--C语言指针与动态内存分配
- C语言的动态内存分配
- C语言的动态内存分配函数
- C语言的动态内存分配
- 黑马程序员——c语言学习—内存的分配与管理
- 黑马程序员——C语言--常见的内存分配函数
- C语言动态内存分配
- C语言动态内存分配
- C语言动态内存分配
- C语言 动态内存分配
- C语言动态内存分配
- c语言:动态内存分配
- C语言-动态内存分配
- c语言-动态内存分配
- C语言动态内存分配
- C语言动态内存分配
- 非递归地中序遍历BST
- [线段树] HDU 1166 - 敌兵布阵
- Android Studio 1.x版 签名key生成,查看key的sha1 和MD5 的方法
- 为什么mvc不是23种设计模式之一?
- 【BZOJ3888】【Usaco2015 Jan】Stampede 线段树判区间覆盖
- 【黑马程序员】c语言的动态内存分配
- 准备从事IOS开发
- android服务学习笔记
- HDU1317( 负权处理)
- 新的开始
- php进阶笔记之数组
- servlet的几种匹配方式
- Lucene.net站内搜索1——SEO优化
- 算法设计之分治法