- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划—— 编译预处理和动态存储分配
第11章 编译预处理和动态存储分配 11.1 编译预处理 11.1.1 宏替换 11.1.2 文件包含 11.2 动态存储分配 11.1 编译预处理——凡是以#开头的行,称为“编译预处理”命令行 作用:对源程序编译之前做一些处理, 然后将预处理的结果和源程序一起再进行正常的编译处理以得到目标代码。 种类 宏定义 #define 文件包含 #include 格式: “#”开头 占单独书写行 语句尾不加分号 11.1.1宏替换 不带参数宏替换 一般形式: #define 宏名 [宏体] 功能:用字符序列(宏体)代替指定标识符(宏名) 说明: ① 宏名一般用大写字母。这不是语法规定,只是一种习惯。 ②可以使用宏名代替一个字符串 ③ 当宏定义在一行中写不下,需要在下一行继续时,只需在最后一个字符后紧接一个反斜线“\”。例如: #define LEAP_YEAR year % 4==0\ year %100!=0 || year % 400==0 注意在第二行开始不要有空格,否则空格会一起被替换。 ④ 宏名的有效范围为定义命令之后到本源文件结束,除非用#undef命令终止宏名的作用域。 ⑤ 对程序中用双引号括起来的字符串内的子串和用户标识符中的成分不做替换。 ⑥ 同一个宏名不能重复定义。 带参数宏替换 一般形式: #define 宏名(参数表) 宏体 带参的宏与函数区别 11.1.2 文件包含 功能:一个源文件可将另一个源文件的内容全部包含进来 一般形式: #include “文件名” 或 #include 文件名 被包含文件内容 源文件(*.c) 头文件(*.h) 11.2动态存储分配 内存空间分配方式:静态存储分配和动态存储分配 静态存储分配:c编译程序根据他们的大小分配内存空间,并且内存空间在整个生存期是固定不变的。这种分配方式称为静态存储分配。 动态存储分配:在程序执行期间动态需要空间存储数据,当空间不需要时可以随时释放分配的空间。这种分配方式称为动态存储分配。 系统提供了4个函数:malloc calloc free realloc 头文件stdlib.h中 1、malloc函数 void *malloc(unsigned size); 功能:分配size个字节的存储空间 返回值:分配内存空间的地址,如不成功返回0。 例:int *pi; float *pf; pi=(int *)malloc(2);pf=(float *)malloc(4); pi=(int *)malloc(sizeof(int)) /*系统计算指定类型的字节数*/ pf=(float *)malloc(sizeof(float)) 2、free函数 函数的调用形式 :free(p)/*将指针p所指存储空间释放*/ 3、calloc函数 void *calloc(unsigned n,unsigned size); 功能:用来给n个同一类型的数据项连续的分配存储空 间。每个数据项长度为size个字节。 返回值:分配内存空间的首地址,如不成功返回0。 例:char *ps; ps=(char *)calloc(10,sizeof(char)); /*开辟了10个连续的char类型的存储单元,ps指向其首地址*/ 此函数释放空间仍用free(ps); P184 13.2 13.6 * * 如 if(x==YES) printf(“correct!\n”); else if (x==NO) printf(“error!\n”); 展开后: if(x==1) printf(“correct!\n”); else if (x==0) printf(“error!\n”); 宏展开:预编译时,用宏体替换宏名---不作语法检查 如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”); 宏体可缺省,可包含已 定义过的宏名 定义位置:一般在程序开头 作用域:从定义命令到文件结束 #undef可终止宏名作用域 格式: #undef 宏名 例
文档评论(0)