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

上传人:飞*** 文档编号:6284434 上传时间:2017-08-08 格式:PPT 页数:21 大小:176KB
返回 下载 相关 举报
第13 章 编译预处理和动态存储分配_第1页
第1页 / 共21页
第13 章 编译预处理和动态存储分配_第2页
第2页 / 共21页
第13 章 编译预处理和动态存储分配_第3页
第3页 / 共21页
第13 章 编译预处理和动态存储分配_第4页
第4页 / 共21页
第13 章 编译预处理和动态存储分配_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第13 章 编译预处理和动态存储分配》由会员分享,可在线阅读,更多相关《第13 章 编译预处理和动态存储分配(21页珍藏版)》请在金锄头文库上搜索。

1、第13 章 编译预处理和动态存储分配,Top77 不带参数的宏替换,Top78 带参数的宏替换,Top79 对编译预处理的一些说明,Top80 动态存储分配,Top77 不带参数的宏替换,考点一般定义形式为:#define 宏名 字符串,说明:宏定义与一般变量定义含义不同,它只作字符替换,并不分配内存空间,也不能认为是赋值。,“#”表示这是一条预处理命令define为宏定义命令宏名为一个合法的标识符字符串可以是常数、表达式或语句,或是多条语句,2.宏展开:预编译时,用宏体替换宏名-不作语法检查,3.引号中的内容与宏名相同也不置换,例 #define PI 3.14159 printf(“2*P

2、I=%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 10int a N;,B、#define n 5int a 2*n;,C、int a 5+5

3、;,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,&r);s=*r*r;printf(s=%fn,s);,Top78 不带参数的宏替换,真题分析(2005-4)下列程序的输出结果是,A、192,B、29,C、25,D、编译出错

4、,#define P 3F(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);宏展

5、开: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);,

6、下面针对该程序的叙述正确的是:,编译出错,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、宏名

7、必须用大写字母表示D、宏替换不占用程序的运行时间,D,Top79 对编译预处理的一些说明,考点:,在C语言中,凡是以“#”开头的行,都称为“编译预处理”命令行,种类宏定义 #define文件包含 #include条件编译 #if-#else-#endif等,格式:“#”开头占单独书写行语句尾不加分号,Top79 对编译预处理的一些说明,真题分析(2006年4月)下列叙述中正确的是A、预处理命令行必须位于C 源程序的起始位置B、在C 语言中,预处理命令行都以#开头C、每个C 程序必须在开头包含预处理命令行:#includeD、 C 语言的预处理不能实现宏定义和条件编译的功能,B,Top79 对编

8、译预处理的一些说明,练习题1、以下叙述中正确的是A、预处理命令必须位于源文件的开头B、在源文件的一行上可以有多条预处理命令C、宏名必须用大写字母表示D、宏替换不占用程序的运行时间,D,Top80动态存储分配,静态存储分配:用于存储数据的变量和数组都是在说明部分定义的,C编译系统通过定义语句了解它们所需要的空间,并预先为其分配适当的存储单元。这些存储单元一经,在变量或数组的生存期内是固定不变的。动态存储分配:在程序执行期间,通过”申请“得到指定的内存单元;当有闲置不用的空间时,可以随时将其释放,由系统另作它用。,四个和动态存储分配有关的函数:(1)malloc(2)calloc(3)free(4

9、)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!=NUL

10、L) *p=6;if(pf!=NULL) *pf=3.8,Top80 动态存储分配,注意:由动态存储分配得到的存储单元没有名字,只能靠指针来引用它。一旦指针改变指向,则原存储单元及所存数据都将无法引用。通过调用malloc函数所分配的单元动态存储单元中没有确定的初值。在动态申请存储空间时,若不能确定数据类型所占字节数,可通过sizeof运算符来求得。例如: pi=(int *)malloc(sizeof(int); pf=(float *)malloc(sizeof(float);由系统来计算指定类型所占的字节数,有利于程序的移植。,Top80 动态存储分配,(3)calloc函数,返回值类型

11、为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指向存储单元的首地址。

12、每个单元可以存储一个字符。用calloc函数开辟的动态存储单元相当于开辟了一个一维数组。函数的第一个参数是数组的大小,第二个是数组元素的类型。函数的返回值就是数组的首地址。使用该函数分配的地址,同样可以用函数free来释放。,Top80 动态存储分配,Top80 动态存储分配,真题分析(2007年4月)以下程序的输出结果是,#includemain()char *s1,*s2,m;s1=s2=(char*)malloc(sizeof(char);*s1=15; *s2=20; m=*s1+*s2;printf(%dn,m);,s1与 s2指向同一个存储单元,40,Top80 动态存储分配,真题分析(2005年9月)已有定义:double *p;,请写出完整的语句,利用malloc 函数使p 指向一个双精度型的动态存储单元,p=(double *)malloc(sizeof(double),

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号