第十三章 预处理和动态分配.ppt_第1页
第十三章 预处理和动态分配.ppt_第2页
第十三章 预处理和动态分配.ppt_第3页
第十三章 预处理和动态分配.ppt_第4页
第十三章 预处理和动态分配.ppt_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章编译预处理和动态分配 作用 对源程序编译之前做一些处理 生成扩展C源程序种类宏定义 define文件包含 include条件编译 if else endif等格式 开头占单独书写行语句尾不加分号 如if x YES printf correct n elseif x NO printf error n 展开后 if x 1 printf correct n elseif x 0 printf error n 1宏定义不带参数宏定义一般形式 define宏名 宏体 功能 用指定标识符 宏名 代替字符序列 宏体 宏展开 预编译时 用宏体替换宏名 不作语法检查 如 defineYES1 defineNO0 definePI3 1415926 defineOUTprintf Hello World 宏体可缺省 表示宏名定义过或取消宏体 定义位置 任意 一般在函数外面 作用域 从定义命令到文件结束 undef可终止宏名作用域格式 undef宏名 宏定义可嵌套 不能递归 例 defineMAXMAX 10 引号中的内容与宏名相同也不置换 例 definePI3 14159printf 2 PI f n PI 2 宏展开 printf 2 PI f n 3 14159 2 宏定义中使用必要的括号 例 defineWIDTH80 defineLENGTHWIDTH 40var LENGTH 2 宏展开 var 80 40 2 带参数宏定义一般形式 define宏名 参数表 宏体 例 defineS r PI r r相当于定义了不带参宏S 代表字符串 r PI r r 宏展开 形参用实参换 其它字符保留宏体及各形参外一般应加括号 例 defineS a b a b area S 3 2 宏展开 area 3 2 不能加空格 例 definePOWER x x xx 4 y 6 z POWER x y 宏展开 z x y x y 一般写成 definePOWER x x x 宏展开 z x y x y 带参的宏与函数区别 2文件包含功能 一个源文件可将另一个源文件的内容全部包含进来一般形式 include 文件名 或 include 处理过程 预编译时 用被包含文件的内容取代该预处理命令 再对 包含 后的文件作一个源文件编译 直接按标准目录搜索 先在当前目录搜索 再搜索标准目录可指定路径 被包含文件内容源文件 c 头文件 h 宏定义数据结构定义函数说明等 文件包含可嵌套 例文件包含举例 动态存储分配 静态存储分配 c编译系统预先为定义的变量或数组等分配固定的存储空间 并在整个生存周期内保持不变 动态存储分配 在程序执行期间 当需要空间来存储数据时 通过 申请 来分配内存空间 当有闲置不用的空间时 可以随时将其释放 系统另做它用 用户可以通过调用标准库函数来实现动态分配 如 malloc calloc free和realloc 使用这些函数时 必须包含头文件stdlib h malloc函数和free函数 malloc函数ANSIc规定malloc函数返回值为void 调用形式为 malloc 字节数 即 void malloc sizeof 类型 或正整数常量 其返回值是一个基类型为void型的地址 指向所分配存储区的首地址 若没有足够的空间 即分配失败 则返回空 NULL 由于malloc返回为void型 故需要强制转换为所需的类型 如 int pi float pf pi int malloc 2 pi int malloc sizeof int pf float malloc 4 pi float malloc sizeof float if pi NULL pi 6 if pf NULL pf 3 8 这样赋值后 数据的赋值情况为 6 3 8 pf pi 说明 由动态分配得到的存储单元没有名字 只能靠指针变量来引用它 一旦改变指针指向 原存储单元及所存储的数据都将无法再引用 而且通过用malloc函数所分配的动态存储单元没有确定的初始值 free函数free函数的调用形式为 free p 这里指针变量p必须指向由动态分配函数所分配的地址 free函数将指针p所指的存储空间释放 使这些空间可以被系统重新支配 free函数没有返回值 3 calloc函数calloc函数的返回值类型也为void 调用形式为 calloc unsignedintn unsignedintsize 其中 n为同一类型数据项所分配的存储空间的数目 size为每一个数据项所占用的字节数 若分配成功 calloc函数返回存储空间的首地址 否则返回空 NULL 注意 由调用calloc函数所分配的存储单元 系统自动置初值0 如 char ps ps char calloc 10 sizeof char 以上函数调用语句开辟了10个连续的char类型的存储单元 由ps指向存储单元的首地址 总结 使用calloc函数动态开辟的存储单元相当于开辟了一个一维数组 c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论