




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13 章 编译预处理和动态存储分配,Top77 不带参数的宏替换,Top78 带参数的宏替换,Top79 对编译预处理的一些说明,Top80 动态存储分配,Top77 不带参数的宏替换,考点 一般定义形式为:#define 宏名 字符串,说明: 宏定义与一般变量定义含义不同,它只作字符替换, 并不分配内存空间,也不能认为是赋值。,“#”表示这是一条预处理命令 define为宏定义命令 宏名为一个合法的标识符 字符串可以是常数、表达式或语句,或是多条语句,2.宏展开:预编译时,用宏体替换宏名-不作语法检查,3.引号中的内容与宏名相同也不置换,例 #define PI 3.14159 printf(“2*PI=%fn”,PI*2); 宏展开:printf(“2*PI=%fn”,3.14159*2);,4.宏定义可嵌套,不能递归,例 #define MAX MAX+10 (),5.宏定义中使用必要的括号(),例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2; 宏展开:var= 80+40 *2;,Top78 不带参数的宏替换,真题分析 (2006年9月)若要求定义具有10 个int 型元素的一维数组a,则下列定义语句中错误的是,A、#define N 10 int a N;,B、#define n 5 int a 2*n;,C、int a 5+5;,D、int n=10,a n;,D,Top78 不带参数的宏替换,真题分析 (2005-9)下列程序的功能是:给r 输入数据后计算半径为r 的圆面积s。程序在编译时出错,出错的原因是,A、注释语句书写位置错误,B、存放圆半径的变量r 不应该定义为整型,C、输出语句中格式描述符非法,D、计算圆面积的赋值语句中使用了非法变量,D,main( ) /* Beginning */ int r; float s; scanf(“%d“, ,Top78 不带参数的宏替换,真题分析 (2005-4)下列程序的输出结果是,A、192,B、29,C、25,D、编译出错,#define P 3 F(int x) return(P*x*x); main( ) printf(“%dn“,F(3+5); ,A,Top78 带参数的宏替换,带参数宏定义 一般形式: #define 宏名(参数表) 宏体,例 #define S (r) PI*r*r 相当于定义了不带参宏S,代表字符串“(r) PI*r*r”,宏展开:形参用实参换,其它字符保留 宏体及各形参外一般应加括号(),例 #define S(a,b) a*b area=S(3,2); 宏展开: area=3*2;,不能加空格,例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展开:z=x+y*x+y; 一般写成: #define POWER(x) (x)*(x) 宏展开: z=(x+y)*(x+y);,Top78 带参数的宏替换,带参的宏与函数区别,Top78 带参数的宏替换,Top78 带参数的宏替换,真题分析 (2007年4月)有一个名为init.txt的文件,内容如下,#define HDY(A,B) A/B #define PRINT(Y) printf(“y=%dn”,Y),有以下程序,#include “stdio.h” #include “init.txt” main() int a=1,b=2,c=3,d=4,k; k=HDY(a+c,b+d);PRINT(k); ,下面针对该程序的叙述正确的是:,编译出错,A.,运行出错,D.,运行结果为y=0,C.,运行结果为y=6,B.,D,Top78 带参数的宏替换,真题分析 (2005年9月)有下列程序,程序运行后的输出结果是,A、64,28,B、4,4,C、4,3,D、64,64,#define f(x)=(x*x) main( ) int i1,i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); prinft(“%d,%dn“,i1,i2); ,C,Top78 带参数的宏替换,真题分析 (2005年4月)下列叙述中正确的是 A、预处理命令行必须位于源文件的开头 B、在源文件的一行上可以有多条预处理命令 C、宏名必须用大写字母表示 D、宏替换不占用程序的运行时间,D,Top79 对编译预处理的一些说明,考点:,在C语言中,凡是以“#”开头的行,都称为“编译预处理”命令行,种类 宏定义 #define 文件包含 #include 条件编译 #if-#else-#endif等,格式: “#”开头 占单独书写行 语句尾不加分号,Top79 对编译预处理的一些说明,真题分析 (2006年4月)下列叙述中正确的是 A、预处理命令行必须位于C 源程序的起始位置 B、在C 语言中,预处理命令行都以“#“开头 C、每个C 程序必须在开头包含预处理命令行:#include D、 C 语言的预处理不能实现宏定义和条件编译的功能,B,Top79 对编译预处理的一些说明,练习题 1、以下叙述中正确的是 A、预处理命令必须位于源文件的开头 B、在源文件的一行上可以有多条预处理命令 C、宏名必须用大写字母表示 D、宏替换不占用程序的运行时间,D,Top80 动态存储分配,静态存储分配:用于存储数据的变量和数组都是在说明部分定义的,C编译系统通过定义语句了解它们所需要的空间,并预先为其分配适当的存储单元。这些存储单元一经,在变量或数组的生存期内是固定不变的。 动态存储分配:在程序执行期间,通过”申请“得到指定的内存单元;当有闲置不用的空间时,可以随时将其释放,由系统另作它用。,四个和动态存储分配有关的函数: (1)malloc (2)calloc (3)free (4)realloc 使用这些函数时,要包含头文件”stdlib.h“,Top80 动态存储分配,(1)malloc函数,其返回值类型为void。 调用形式为:malloc(size) 要求size的类型为unsigned int 作用:用来分配size个字节的存储空间,返回一个指针指向存储区首地 址的基类型为void的地址。,例: short int *pi; float *pf; pi=(short *)malloc(2); pf=(float *)malloc(4);,说明: (1)因为malloc是void型的,所以需要强制转换类型 (2)强制转换类型括号中的不可少,否则就变成了普通类型。,if(pi!=NULL) *p=6; if(pf!=NULL) *pf=3.8,Top80 动态存储分配,注意: 由动态存储分配得到的存储单元没有名字,只能靠指针来引用它。一旦指针改变指向,则原存储单元及所存数据都将无法引用。 通过调用malloc函数所分配的单元动态存储单元中没有确定的初值。 在动态申请存储空间时,若不能确定数据类型所占字节数,可通过sizeof运算符来求得。例如: pi=(int *)malloc(sizeof(int); pf=(float *)malloc(sizeof(float); 由系统来计算指定类型所占的字节数,有利于程序的移植。,Top80 动态存储分配,(3)calloc函数,返回值类型为void。 调用形式:calloc(n,size) 要求n和size都是unsigned int。 作用:用来给n个同一类型的数据项分配连续的存储空间,每个数据项 长度为size字节。,(2)free函数,没有返回值。 调用形式为:free(p); p必须是指向由动态存储分配函数malloc或calloc分配的地址。 作用:将使指针p所指的存储空间释放,使这部分空间重新归系统支配。,通过calloc函数所分配的存储单元,系统自动赋初值0。例如: char *ps; ps=(char *)calloc(10,sizeof(char); 说明: 以上函数调用语句开辟了10个连续的存储单元,由ps指向存储单元的首地址。每个单元可以存储一个字符。 用calloc函数开辟的动态存储单元相当于开辟了一个一维数组。函数的第一个参数是数组的大小,第二个是数组元素的类型。函数的返回值就是数组的首地址。 使用该函数分配的地址,同样可以用函数free来释放。,Top80 动态存储分配,Top80 动态存储分配,真题分析 (2007年4月)以下程序的输出结果是,#include main() char *s1,*s2,m; s1=s2=(char*)malloc(sizeo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省江门市第九中学2024-2025学年九年级上学期期中考试化学试卷(含答案)
- 电生理知识培训课件
- 电焊课件模板
- 北中高三期末考试试卷及答案
- 北京高考化学考试真题及答案
- 3-Oxoeicosa-cis-cis-11-14-dienoyl-CoA-3-Oxoeicosa-cis-cis-11-14-dienoyl-coenzyme-A-生命科学试剂-MCE
- 北海物理中考试卷真题及答案
- 高温用车安全知识培训课件
- 保利地产入职考试试题及答案
- 中考山脉考试题及答案
- 国家开放大学电大专科《政治经济学》网络课机考网考形考单项选择题题库及答案
- 公开课教学评价表
- 消防验收规范标准(最新完整版)19844
- 教研工作手册
- 电工电子技术基础教学大纲
- 独树一帜的中国画(课堂PPT)
- 制钵机的设计(机械CAD图纸)
- 生产设备控制程序
- 艾草深加工项目可行性研究报告写作范文
- LCM不良命名规范
- 《融资租赁业务介绍》PPT课件.ppt
评论
0/150
提交评论