整理C知识点--动态内存分配

为什么需要动态分配内存?
因为动态数组可以解决静态数组的缺陷
(1).静态数组长度必须先指定,并且只能是常整数,而且也不能为变量(长度不能为不确定的数)
(2).静态数组,程序员无法手动释放内存
(3).静态数组确定后 无法更改(不能自主的扩充或缩小)
(4).静态数组不能跨函数调用

公司主营业务:网站设计制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出陆良免费做网站回馈大家。

动态内存分配--动态数组的构造

e.g:
int *p = (int *)malloc(int Len);
//表达式左侧是静态分配的 占用4个字节(int),右侧是动态分配的,含有Len个字节

1.malloc只有一个int型参数,表示要求系统分配的字节数
2.malloc函数的功能是请求系统分配Len个字节的内存空间,如果分配成功则返回第一个字节地址,若不成功则返回NULL
malloc函数只能返回第一个字节的地址,把这个地址转化为一个实际意义的地址,malloc前必须加(数据类型 *),表示把空类型转化为对应数据类型的地址

e.g:
int *p = (int *)malloc(50);
//表示把系统分配的50个字节的第一个字节转化为int*型的地址,再准确的说就是把第一个字节的地址转化成4个字节的地址;
P指向第一个4字节 P+1指向第2个地址 P[0]第一个元素 P[i]就是i+1个元素

动态内存的释放
free(p);//表示把p指向的内存释放 P本身的内存是静态的

静态内存 和 动态内存比较
静态内存是由系统自动分配的,由系统自动释放
静态内存是在栈分配的
整理C知识点--动态内存分配
动态内存是有程序员手动分配的,由程序员手动释放
动态内存是在堆中分配的
(使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就
走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自
由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由
度大。 (引用其他的大神的 有兴趣的同学可以自行研究) )

跨函数使用内存的问题(重点)
静态内存不可以跨函数使用
所谓静态内存不可以跨函数使用的具体是:
静态内存在函数执行期间 可以被其他函数使用
在执行完毕之后就不能在被其他函数使用

动态内存可以跨函数使用
动态内存在函数执行完毕之后仍可以被其他函数调用


标题名称:整理C知识点--动态内存分配
网站路径:http://ybzwz.com/article/jehpdi.html