C语言-指针与动态内存分配

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2020/5/7
2/42
动态分配能够存储n个int类型学生成绩的数组
int n; scanf("%d",n); int score[n];
错误!为什么?
2020/5/7
3/42
动态内存分配函数
Two primary methods of allocating memory:
#include <stdlib.h> #include <alloc.h>
void* malloc(unsigned int size);
void* calloc(unsigned int num, unsigned int size);
2020/5/7
void*类型的指针可以指向任意类型的变 量,通常强转(Type*)为其他类型
4/42
动态内存分配函数
Two primary methods of allocating memory: void* malloc(unsigned int size);
Байду номын сангаас
11/42
第7章 3动态内存分配
C程序的内存映像
C程序中变量的内存分配方式
– 从静态存储区分配
全局变量和静态变量
– 在栈上创建
存放函数参数值,局部变量值等 在执行函数调用时,系统在栈上为函数内的局部变量及形 参分配内存,函数执行结束时,自动释放这些内存
– 从堆上分配
在程序运行期间,用动态内存分配函数来申请的内存都是 从堆上分配的,动态内存的生存期由程序员自己来决定
n p
像使用一维数组一样 使用动态数组
2020/5/7
8/42
2020/5/7
【例】 二维动态数组
m*n p
确保指针使用前是 非空指针 释放向系统申请的 存储空间
9/42
【例】 二维动态数组
仍当作一维数组 来使用
m*n p
2020/5/7
10/42
Questions and answers
2020/5/7
void* free(void* p);
释放由malloc()和calloc()申请的内存块 p是指向此块内存的指针 free时系统标记此块内存为未占用,可被重新分配
2020/5/7
6/42
2020/5/7
【例】 一维动态数组
n p 确保指针使用前是非空指针
释放向系统申请的存储空间
7/42
【例】 一维动态数组
向系统申请大小为size的内存块 把首地址返回,若申请不成功则返回NULL
void* calloc(unsigned int num, unsigned int size);
向系统申请num个size大小的内存块 把首地址返回,若申请不成功则返回NULL
2020/5/7
5/42
动态内存分配函数
Method of deallocating memory:
相关文档
最新文档