笔记 动态存储分配以及链表的概念.docxVIP

  • 2
  • 0
  • 约1.71千字
  • 约 3页
  • 2022-09-24 发布于湖南
  • 举报
笔记 动态存储分配以及链表的概念 笔记动态存储分配以及链表的概念 笔记lowbar;动态存储分配以及链表的概念 用变量则表示长度,想要对数组的大小并作动态表明,这就是错误的.必须采用内存管理函数这些内存管理函数可以按须要动态地分配内存空间,也可以把不再采用的空间废旧姜味,为有效地利用内存资源提供更多了手段。 1.分配内存空间函数malloc调用形式: (类型说明符*)malloc(size) 功能:在内存的动态存储区中分配一块长度为size字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”则表示把该区域用作何种数据类型。 (类型说明符*)表示把返回值强制转换为该类型指针。 “size”就是一个并无符号数。 pc=(char*)malloc(100); 则表示分配100个字节的内存空间,并强制性切换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针剥夺指针变量pc。 2.分配内存空间函数calloc calloc也用作分配内存空间。调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的已连续区域。函数的返回值为该区域的首地址。 (类型说明符*)用于强制类型转换。 calloc函数与malloc函数的区别仅是一次可以分配n块区域。比如: ps=(struetstu*)calloc(2,sizeof(structstu)); 其中的sizeof(structstu)厚边stu的结构长度。因此该语句的意思就是:按stu的长度分配2块已连续区域,强制性切换为stu类型,并把其首地址剥夺指针变量ps。 3、释放内存空间函数free调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。 【基准11.8】分配一块区域,输出一个学生数据。 structstu intnum; char*name; charsex; floatscore; ps=(structstu*)malloc(sizeof(structstu)); ps-num=102; ps-name=zhangping; ps-sex=m; ps-score=62.5; printf(number=%d\nname=%s\n,ps-num,ps-name); printf(sex=%c\nscore=%f\n,ps-sex,ps-score); free(ps); 本例中,定义了结构stu,定义了stu类型指针变量ps。然后分配一块stu小内存区,并把首地址剥夺ps,并使ps指向该区域。再以ps为指向结构的指针变量对各成员赋值,用printf输入各成员值。最后用free函数释放出来ps指向的内存空间。整个程序涵盖了提出申请内存空间、采用内存空间、释放出来内存空间三个步骤,同时实现存储空间的动态分配。 可在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为0。这样一种连接方式,在数据结构中称为“链表”。 右图为最一直观链表的示意图。 图中,第0个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量。以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号num,姓名name,性别sex和成绩score等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。

文档评论(0)

1亿VIP精品文档

相关文档