第13章-编译预处理和动态存储分配.pptVIP

第13章-编译预处理和动态存储分配.ppt

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章-编译预处理和动态存储分配

本章重点 13.1 编译预处理 13.2 动态存储分配 第13章 编译预处理和动态存储分配 13.1 编译预处理 预编译处理:在C源程序编译前,由编译预处理程序对编 译预处理命令行进行处理的过程。 编译预处理命令行:#开头,末尾无分号; 如#includestdio.h #includemath.h #define PI 3.14 13.1.1 宏替换 1.不带参数的宏定义 宏定义的一般形式为: #define 宏名 替换文本 例如:#define SIZE 10 标识符SIZE称为宏名,此命令执行后,预处理程序对源 程序中的所有名为SIZE的标识符用10来替换,此过程就 称为“宏替换”。 2.带参数的宏定义 在宏定义中的参数称为形式参数,简称形参; 在宏调用中的参数称为实际参数,简称实参。 带参数的宏定义一般形式为: #define 宏名(形参表) 字符串 在编译预处理时,程序中凡是带实参的宏,一律按#define命令行中指定的字符串从左到右进行替换,原来没有括号的,不能自己加括号。 注意:宏定义和函数调用的区别。 3.终止宏定义:#undef SIZE 习题P182 13.1 13.2 13.3 13.1.2 文件包含:指一个源程序文件将另一个指定文件的全部内容包含进来,即将另一个文件包含到本文件之中。这一过程通过预处理命令#include来完成。文件包含预处理语句的一般形式为:#include 包含文件或#include “包含文件” #include stdio.h包含输入输出函数 #include math.h包含数学函数 #include stdlib.h包含动态存储分配函数 #include string.h包含字符串处理函数 #include ctype.h包含字符处理函数 在编译时,预编译程序将用指定文件中的内容来替 换此命令行。 13.2 动态存储分配 静态存储分配:用于存储数据的变量必须在说明部分进行定义,并预先为其分配适当的内存空间,在变量生存期内是固定不变的。 动态存储分配:在程序执行期间需要空间来存储数据时,通过申请分配指定的内存空间;当有闲置不用的空间时,可以随时将其释放。 13.2.1 malloc函数和free函数 1.malloc函数 malloc函数的调用形式为:malloc(size) 其中size的类型为unsigned int,函数返回值类型为void*,即返回一个指向存储区首地址的基类型为void的地址。由动态分配得到的存储单元没有名字,只能靠指针引用。在动态申请存储空间时,若不能确定数据类型所占字节数,可用sizeof运算符求得。例如: int *pi;float *pf; pi=(int *)malloc(sizeof(int)); pf=(float*)malloc(sizeof(float)); 2.free函数 free函数调用的形式为:free(p) p是指针变量,必须指向由动态分配函数malloc分配 的地址,free函数将指针p所指的存储空间释放,使这 部分空间可以由系统重新支配。此函数没有返回值。 13.2.2 calloc函数 调用形式为:calloc(n,size);其返回值的类型为void*。 calloc函数用来给n个同一类型的数据项分配连续的存 储空间。每个数据项的长度为size个字节,若分配成 功,函数返回存储空间的首地址;否则返回空。由调 用calloc函数所分配的存储单元,系统自动设初值0。 例如:char *ps; ps=(char *)calloc(10,sizeof(char)); 以上语句开辟了10个连续的char类型的存储单元,由 ps指向存储单元的首地址。每个存储单元可以存放一 个字符。   显然,使用calloc函数开辟的动态存储单元相当于开辟了一个一维数组。函数的第一个参数决定了一维数组的大小;第二个参数决定了数组元素的类型。函数的返回值就是数组的首地址。   使用calloc函数开辟的动态存储单元,同样用free函数释放。调用形式:free(p) P184习题13.12 请编写程序,利用malloc函数开辟动态存储单元, 存放输入的三个整数,然后按从小到大的顺序输出这三个数。 #includestdio.h #includestdlib.h void main(){int *p1,*p2,*p3,t;//指针变量p1、p2、p3指向新开辟的存储单元 p1=(int*)malloc(sizeof(int)); //指针变量p1指向一个新开辟的int类型的单元 p2=(int*)malloc(sizeof(int));// 返回值为指向存储区首地址

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档