lecture13一高级指针 绳伟光 上海交通大学微纳电子学系 2017年04月18日 SHA ERS
lecture 13 —— 高级指针 绳伟光 上海交通大学微纳电子学系 2017年04月18日
内容 ■动态内存分配 2
动态内存分配 内容 2
动态存储分配 ■C的数据结构,包括数组,一般都是具有固定 尺寸的 固定尺寸的问题在于必须在编译时事先指定尺 寸,而指定的尺寸又未必合适 ( c还支持动态存储分配(dynamic storage allocation:即在运行时分配存储空间的能力 ■ 利用动态存储分配机制,我们可以设计能按需 增长内存空间的数据结构 动态存储分配主要用于字符串、数组和结构
动态存储分配 C的数据结构,包括数组,一般都是具有固定 尺寸的 固定尺寸的问题在于必须在编译时事先指定尺 寸,而指定的尺寸又未必合适 C还支持动态存储分配(dynamic storage allocation): 即在运行时分配存储空间的能力 利用动态存储分配机制,我们可以设计能按需 增长内存空间的数据结构 动态存储分配主要用于字符串、数组和结构 3
动态存储分配(续) 动态分配的数据结构可以组合在一起构成链表 ((lists),树(trees)以及其它复杂数据结构 动态存储分配是通过调用内存分配函数完成的 内存分配函数分布在头文件<stdlib.h>中 malloc:该函数分配一块空间,但不初始化 calloc:该函数分配一块空间,且初始化 realloc:该函数调整已分配的空间的大小 ■三个函数返回的都是void*指针,即泛化 (generic)的指针类型
动态存储分配(续) 动态分配的数据结构可以组合在一起构成链表 (lists), 树(trees)以及其它复杂数据结构 动态存储分配是通过调用内存分配函数完成的 内存分配函数分布在头文件<stdlib.h>中 malloc:该函数分配一块空间,但不初始化 calloc:该函数分配一块空间,且初始化 realloc:该函数调整已分配的空间的大小 三个函数返回的都是void*指针,即泛化 (generic)的指针类型 4
空指针(Null Pointers) 如果动态内存分配失败,会返回一个空指针 空指针的值是一个特殊值,可以和所有有效的 指针加以区分 ■必须检查动态内存分配函数的返回值是否是空 指针 p = ma11oc(10066); if (p =NULL /*allocation failed;take appropriate action*/ NULL是标准库中定义的一个宏,代表空指针值 5
空指针(Null Pointers) 如果动态内存分配失败,会返回一个空指针 空指针的值是一个特殊值,可以和所有有效的 指针加以区分 必须检查动态内存分配函数的返回值是否是空 指针 NULL是标准库中定义的一个宏,代表空指针值 p = malloc(10000); if (p == NULL) { /*allocation failed; take appropriate action*/ } 5