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

用变量表示长度,想对数组的大小作动态说明,这是错误的.要使用内存管理函数这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

1. 分配内存空间函数malloc 调用形式:

(类型说明符*)malloc(size)

功能:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为该区域的首地址。

“类型说明符”表示把该区域用于何种数据类型。

(类型说明符*)表示把返回值强制转换为该类型指针。

“size”是一个无符号数。

例如:

pc=(char *)malloc(100);

表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。

2. 分配内存空间函数 calloc

calloc 也用于分配内存空间。 调用形式:

(类型说明符*)calloc(n,size)

功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。

(类型说明符*)用于强制类型转换。

calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。 例如:

ps=(struet stu*)calloc(2,sizeof(struct stu));

其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

3、 释放内存空间函数free 调用形式:

free(void*ptr);

功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。

【例11.8】分配一块区域,输入一个学生数据。

main()

{

struct stu

{

int num;

char *name;

char sex;

float score;

} *ps;

ps=(struct stu*)malloc(sizeof(struct stu));

ps->num=102;

ps->name="Zhang ping";

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等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。

用变量表示长度,想对数组的大小作动态说明,这是错误的.要使用内存管理函数这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

1. 分配内存空间函数malloc 调用形式:

(类型说明符*)malloc(size)

功能:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为该区域的首地址。

“类型说明符”表示把该区域用于何种数据类型。

(类型说明符*)表示把返回值强制转换为该类型指针。

“size”是一个无符号数。

例如:

pc=(char *)malloc(100);

表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。

2. 分配内存空间函数 calloc

calloc 也用于分配内存空间。 调用形式:

(类型说明符*)calloc(n,size)

功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。

(类型说明符*)用于强制类型转换。

calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。 例如:

ps=(struet stu*)calloc(2,sizeof(struct stu));

其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

3、 释放内存空间函数free 调用形式:

free(void*ptr);

功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。

【例11.8】分配一块区域,输入一个学生数据。

main()

{

struct stu

{

int num;

char *name;

char sex;

float score;

} *ps;

ps=(struct stu*)malloc(sizeof(struct stu));

ps->num=102;

ps->name="Zhang ping";

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等。另一个域为指针域,存放下一结点的首地址。链表中的每一个结点都是同一种结构类型。


相关内容

  • 信息技术笔记
  • 信息技术笔记 1 信息技术简介 1.1 我国信息技术存在问题 (1)核心技术.关键设备和元器件受制于人(高端芯片.核心软件.关键元器件.高端设备以及专用设备等) 高端芯片如:处理器芯片 核心软件如: 关键元器件如: 高端设备如: 专用设备如: (2)产业结构亟需(Jí xū)优化(信息产业位于国际产 ...

  • 编译原理--教学大纲
  • <计算机编译原理>课程大纲 一.适用对象 本课程适用于计算机科学与技术以及相关专业的网络教育.成人教育学生. 二.课程性质 本课程是计算机科学与技术专业学生的专业基础课. 编译原理课程是计算机专业的一门主干课程.课程介绍程序设计语言编译程序构造的一般原理.基本设计方法.主要实现技术和一些 ...

  • 物联网技术发展动态报告
  • 燕山大学 专业综合训练说明书 题目:物联网技术发展动态 学院(系): 电气工程学院 年级专业: 12级精仪一班 学 号: [1**********]1 学生姓名: 陈永秀 指导教师: 崔法毅 教师职称: 副教授 燕山大学专业综合训练任务书 2015年9月13日 目录 第 一 篇 .......... ...

  • 内存与硬盘区别
  • 内存就是存储程序以及数据的地方,比如当我们在使用WPS处理文稿时,当你在键盘上敲入字符时,它就被存入内存中,当你选择存盘时,内存中的数据才会被存入硬(磁)盘.在进一步理解它之前,还应认识一下它的物理概念. ●只读存储器(ROM) ROM表示只读存储器(Read Only Memory),在制造ROM ...

  • 2014年自考软件开发工具资料笔记
  • 软件开发工具资料笔记 第1章 绪论 1.1 软件开发工具的由来 1.软件产品的(质量)(效率)(价格)已成为各方面关注的十分重要的问题.(多选题) 2.名词解释:软件开发工具 在高级程序设计语言的基础上,为提高软件的质量和效率,从规划.分析.设计.测试.成文和管理各方面,对软件开发者提供各种不同程度 ...

  • 浅谈云计算的课程论文
  • 第一章 云计算的发展,历程以及现状简述 计算作为人类自然科学甚至社会科学的重要一个环节,在历史的发展中担当了重要的角色,特别是人类的以信息技术,电子计算机为标志的第三次工业革命的开始.在现代科学的发展中--计算能力已经成为衡量一个国家的科学发展能力的重要标准. 在计算的初级阶段,我们主要是客户机/服 ...

  • 计算机考研知识点
  • 计算机学科专业基础综合 Ⅰ考查目标 计算机学科专业基础综合考试涵盖数据机构.计算机组成原理.操作系统和计算机网络等学科专业基础课程.要求考生比较系统地掌握上述专业基础课程的概念.基本原理和方法,能够运用所学的基本原理和基本方法分析.判断和解决有关理论问题和实际问题. Ⅱ考试形式和试卷结构 一.试卷满 ...

  • 有关云架构建设和选型的思考
  • 最近在负责公司内部私有云的建设,一直在思考怎么搞云计算,怎么才能够把云架构设计得好一些.本文尽量全面的列出了云架构建设和选型的考量因素. 我们主要从五个层面逐步评估云架构的建设和选型,分别是: 行业生态 企业需求 云计算的能力 潜在的挑战 如何建设 一.行业生态 计算机云经过多年的发展,由一开始的概 ...

  • 运筹学在物流合理化的应用梦
  • 运筹学在物流合理化的应用 (华北水利水电大学 河南郑州) 摘要:这篇文章讲的是物流合理化分析与研究中的若干运筹学问题.主要有:物流中心选址问题:商品(产品)的配送路线问题等.模型涉及线性规划,整数规划,动态规划等.求解算法多为特色的启发式算法及某些新算法. 关键词:物流:运筹学:模型:最优解 Abs ...