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

上传人:sccc 文档编号:5305611 上传时间:2023-06-24 格式:PPT 页数:11 大小:820.01KB
返回 下载 相关 举报
第九章编译预处理和动态存储分配.ppt_第1页
第1页 / 共11页
第九章编译预处理和动态存储分配.ppt_第2页
第2页 / 共11页
第九章编译预处理和动态存储分配.ppt_第3页
第3页 / 共11页
第九章编译预处理和动态存储分配.ppt_第4页
第4页 / 共11页
第九章编译预处理和动态存储分配.ppt_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《第九章编译预处理和动态存储分配.ppt》由会员分享,可在线阅读,更多相关《第九章编译预处理和动态存储分配.ppt(11页珍藏版)》请在三一办公上搜索。

1、第九章 编译预处理和动态存储分配,考试要点,一、考核知识点(3%左右):1.宏定义、不带参数的宏定义、带参数的宏定义2.文件包含处理3.动态存储分配二、重要考点:1.理解并会使用宏定义2.使用常用函数的“文件包含”。,9.1 宏定义,考点1 不带参数的宏定义 不带参数的宏定义命令形式如下:#define 宏名 替换文本 在define宏名和宏替换文本之间要用空格分隔开。说明:宏名一般习惯用大写字母表示,宏替换的过程实质上是原样替换的过程。宏定义可以减少程序中重复输写某些字符串的工作量。考点2 带参数的宏定义 定义的一般形式是:#define 宏名(参数表)字符串 宏定不只进行简单的字符串替换,

2、还要进行参数替换,例如:#define MV(x,y)(x)*(y)a=MV(5,2);/*引用带参的宏名*/b=6/MV(a+3,a);注意:在替换带参数的宏名时,圆括号必不可少。,9.1 宏定义,考点2 带参数的宏定义 带参数的宏和函数之间有一定类似之处,在引用函数时也是在函数右边的括号里写参数,也要求实参与形参数目相等,但两者是不同的,主要表现在:(1)函数调用时,要求实参形参类型相匹配,但在宏替换中,对参数 没有类型的要求。(2)函数调用时,先求出实参表达式的值,然后代入形参,而使用带 参数的宏只是进行简单的字符串替换。(3)函数调用是在程序运行时处理的,要分配临时的内存单元,还要 占

3、用一系列的处理时间。宏替换是在编译预处理时完成的,因 此,宏替换不占用运行时间。不被分配内存单元,不进行值的传 递,也没有”返回值”的概念。(4)使用宏的次数较多时,宏展开后源程序变长,而函数调用不会。,9.2 文件包含,考点3 文件包含 所谓文件包含,是指在一个文件中,去包含另一个文件的全部内容。C语言用#include命令行来实现文件包含的功能,形式如下:#include“文件名”或 include 两者的区别:前者,系统先在当前源程序所在目录内查找指定的包含文件,若找不到,再按系统指定的标准方式到有关目录中去寻找。后者,系统将直接按照系统指定的标准方式到有关目录中去寻找。,9.3 关于动

4、态存储的函数,我们知道,构成链表结构的每一个节点,是在需要时由系统自动分配存储的,即需要时才开辟一个节点的存储单元。考点4 malloc()函数 函数原型为:void*malloc(unsigned int size);该函数的作用是系统自动在内存的动态存储区中,分配长度为size的一段连续空间,若此函数执行成功,返回指向被分配区域的起始地址的指针,若失败,则函数返回值为空指针(NULL)。考点5 calloc()函数 函数原型为:void*calloc(unsigned n,unsigened size);该函数的作用是系统自动在内存的动态存储区中,分配n个长度为size的连续空间。考点6

5、free()函数 函数原型为:void free(void*p);该函数的作用是释放由p指向的那段内存空间,使这段存储空间能为他用。P是最近一次调用malloc()或calloc()函数时返回的值,注意:free()函数无返回值。,9.4 典型例题,一、选择题:1.以下叙述中正确的是()A)用#include包含的头文件的后缀不可以是”.a”B)若一些源程序中包含某个头文件,当该头文件有错时,只需对该 头文件进行修改,包含此头文件的所有源程序不必重新进行编译。C)宏命令行可以看做是一行C语句 D)C编译中的预处理是在编译之前进行的,9.4 典型例题,一、选择题:2.执行下述程序后,输出的结果是

6、()#include#define SQR(X)X*X main()int a=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf(“%d”a);A)10 B)1 C)9 D)0附:#define SQR(x)x*x main()int a,k=3;a=+SQR(k+1);printf(“%dn”,a);,9.4 典型例题,一、选择题 3.以下程序的输出结果是()#define MIN(x,y)(x)main()int i,j,k;i=10;j=15;k=10*MIN(i,j);printf(“%dn”,k);A)15 B)100 C)10 D)150,9.4 典型例

7、题,一、选择题 4.以下程序:#define N 2#define M N+1#define NUM(M+1)*M/2#include main()int i;for(i=1;i=NUM;i+);printf(“%dn”,i);A)5 B)6 C)8 D)9,9.4 典型例题,一、填空题1.若要使指针p指向一个double类型的动态存储单元,请填空。double*p;p=_malloc(size(double);2.以下程序的输出结果是_#define PR(ar)printf(“ar=%d”,ar)#include main()int j,a=1,3,5,7,9,11,13,15,*p=a+5;for(j=3;j;j-)switch(j)case 1:case 2:PR(*p+);break;case 3:PR(*(-p);,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号