C和C++ 语言动态内存分配
2013-01-11 19:15
225 查看
C和C++ 语言动态内存分配
(转自:要八戒更要悟空 /article/5538098.html)
一、C语言动态内存分配要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”)
1.malloc函数
函数原型为void *malloc(unsigned int size);在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。若size超出可用空间,则返回空指针值NULL。
2.calloc 函数
函数原型为void *calloc(unsigned int num, unsigned int size)
按所给数据个数和每个数据所占字节数开辟存储空间。其中num为数据个数,size为每个数据所占字节数,故开辟的总字节数为num*size。函数返回该存储区的起始地址。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。
3. realloc函数:
函数原型为void *realloc(void *ptr, unsigned int size)
重新定义所开辟内存空间的大小。其中ptr所指的内存空间是用前述函数已开辟的,size为新的空间大小,其值可比原来大或小。函数返回新存储区的起始地址(该地址可能与以前的地址不同)。例如p1=(float *)realloc(p1,16);将原先开辟的8个字节调整为16个字节。
**动态申请的内存空间要进行手动用free()函数释放
4. free函数:
函数原型为void free(void *ptr)
将以前开辟的某内存空间释放。函数原型为 void free(void *ptr)其中ptr为存放待释放空间起始地址的指针变量,函数无返回值。应注意:ptr所指向的空间必须是前述函数所开辟的。例如free((void *)p1);将上例开辟的16个字节释放。可简写为free(p1);由系统自动进行类型转换。
二、C++语言动态内存分配
C++语言中用new和delete来动态申请和释放内存。
1. 申请单个对象
int *p;
p=new int;或者 p=new int(value);
2. 动态申请数组
int *p;
p=new int [100];
这样可以申请长度为100的数组,但是不能进行初始化。
3. delete
int *p, *q;
p=new int;
q=new int[10];
delete p;
delete [ ]q;
相关文章推荐
- C和C++ 语言动态内存分配
- C和C++ 语言动态内存分配
- C和C++ 语言动态内存分配
- 项目1-c/c++语言中函数参数传递的三种方式
- [C++/CLI编程宝典][2]什么是C++/CLI语言
- C/C++语言void及void指针深层探索
- C++语言——99个常见编程编程 学习小结
- 利用C++、scala等语言的运算符重载功能定制领域特定语言(DSL,Domain-Specific Language )
- 基本语言细节--C++之sizeof与strlen的区别
- C/C++语言void及void指针深层探索
- C_PlusPlus学习笔记 - 6_继承与派生(C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- 巧用C/C++语言函数指针
- 如何在Linux下用C/C++语言操作数据库sqlite3
- C/C++是程序员必须掌握的语言吗?
- 第二周项目 1—C/C++语言中函数参数传递的三种方式
- C/C++语言void及void指针深层探索
- C/C++语言void及void指针深层探索
- linux下利用C或C++ 语言调用需要root权限
- ios开发-如何将oc文件转成c,c++语言文件,后缀名为cpp
- 计算文件大小(C/C++语言)