1)全局变量——内存中的静态存储区今年春晚评价
2)非静态的局部变量——内存中的动态存储区——stack 栈
3)临时使用的数据—建立动态内存分配区域,需要时随时开辟,不需要时及时释放——heap 堆
4)根据需要向系统申请所需大小的空间,由于未在声明部分定义其为变量或者数组,不能通过变量名或者数组名 来引用这些数据,只能通过指针来引用)
1)头文件#include
声明了四个关于内存动态分配的函数
2)函数原型void * malloc(usigned int size) //memory allocation
3)函数原型void *calloc(unsigned n,unsigned size)
作用——在内存的动态存储区中分配 n 个长度为 size 的连续空间,这个空间一般比较大,足以保存一个数组用 calloc 函数可以为一维数组开辟动态存储空间,n 为数组元素个数,每个元素长度为 size.函数返回指向所分配域的起始位置的指针;分配不成功,返回 null。p = calloc(50, 4); //开辟 50*4 个字节临时空间,把起始地址分配给指针变量 p
4)函数原型:void free(void *p)
作用——释放变量 p 所指向的动态空间,使这部分空间能重新被同桌的你歌词改编其他变量使用。p 是最近一次调用 calloc 或 malloc 函数时的函数返回值free 函数无返回值free (p ); // 释放 p 所指向的已分配的动态空间
5) 函数原型void *realloc(void *p,unsigned int size)
作用——重新分配 malloc 或 calloc 函数获得的动态空间大小,将 p 指向的动态空间大小改变为 size,p 的值不 变,分配失败返回 nullrealloc(p, 50); // 将 p 所指向的已分配的动态空间 改为 50 字节
6)返回类型说明
动态创建数组,输入 5 个学生的成绩,另外一个函数检测成绩低于 60 分的,输出不合格的成绩。
代码演示
#include <stdlib.h>#include <stdio.h>int main() {void check(int *);int * p,i; // 在堆区开辟一个 5 * 4 的空间,并将地址 (void *) , 转成 (int *) , 赋给 pp = (int *)malloc(5*sizeof(int));for( i = 0; i < 5; i++) {scanf("%d", p + i);}check(p); //free(p); //销毁 堆区 p 指向的空间 getchar(); getchar();return 0;}void check(int *p) {int i;printf("\n不及格的成绩 有: ");for(i =0; i < 5; i++) {if(p[i] < 60) {printf(" %d ", p[i]);}}}
1)避免分配大量的小内存块。分配堆上的内存有一些系统开销,所以分配许多小的内存块比分配几个大内存块的 系统开销大
2)仅在需要时分配内存。只要使用完堆上的内存块,就需要及时释放它青年的年龄(如果使用动态分配内存,需要遵守原则: 谁分配,谁释放),否则可能出现内存泄漏
3)总是确保释放以分配的内存。在编写分配内存的代码时,就要确定在代码的什么地方释放内存
4)在释放内存之前,确保不会无意中覆盖堆上已分配的内存地址,否则程序就会出现内存泄漏。在循环中分配内 存时,要特别小心
5)指针使用一览
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!
本文发布于:2023-04-04 09:23:59,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/97d1017188f124ce55b0ccbad4d39018.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:详解C语言动态内存的分配.doc
本文 PDF 下载地址:详解C语言动态内存的分配.pdf
留言与评论(共有 0 条评论) |