c/c++语言开发共享动态内存分配详情

(一)内存的动态分配 全局变量分配在内存中的静态存储区,局部变量分配在内存中的动态存储区(栈)。 除此之外,中还存在一个临时存放数据的内存动态分配区域(堆)。 特点:不必在程序的声明部分定义,不必等

(一)内存的动态分配

全局变量分配在内存中的静态存储区,局部变量分配在内存中的动态存储区(栈)。

除此之外,中还存在一个临时存放数据的内存动态分配区域(堆)。

特点:不必在程序的声明部分定义,不必等到函数结束时才释放,可以随时开辟,随时释放;且这些数据只能通过指针来引用。

(二)4个实现内存动态分布的库函数

这四个库函数的头文件#include

malloc函数

void * malloc(unsigned int size)

在内存的动态存储区分配一个长度为size的连续空间,返回值为分配空间的开头位置,失败则返回null。指针的基类型为void表示不指向任何类型的数据,只提供一个地址。

calloc函数

void *calloc(unsigned int n,unsigned int size)

分配n个长度为size的连续空间。

calloc常用来为动态数组分配空间,以一维数组为例,n就代表元素个数,size代表每个元素的长度

free函数

void free(void *p)

释放指针变量p所指向的动态空间,此函数无返回值

realloc函数

void *realloc(void *p,unsigned int size);

realloc常用来重新分配,改变p指向的动态空间的大小为size

(三)动态数组小例子

1 #include

2 #include

3 int main(){

4 void check(int *p);

5 int *p1,i;

6 p1=(int*)malloc(5*sizeof(int));//将分配的空间的首元素地址给p1

7 for(i=0;i<5;i++){

8 scanf("%d",p1+i);

9 }

10 check(p1);

11 free(p1); //释放动态分配空间

12 }

13

14 void check(int *p){

15 int i;

16 printf("不及格成绩为:");

17 for(i=0;i<5;i++)

18 if(p[i]<60) printf("%d ",p[i]);

19 printf("n");

20 }

sizeof(int)是获得当前int型数据所占的字节数,

malloc函数的返回值是void指针类型,先需要指向int型数据时,需要强制转换为int指针类型

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607350.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐