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

上传人:本田雅阁 文档编号:2121722 上传时间:2019-02-18 格式:PPT 页数:11 大小:820.01KB
返回 下载 相关 举报
第九章编译预处理和动态存储分配.ppt_第1页
第1页 / 共11页
第九章编译预处理和动态存储分配.ppt_第2页
第2页 / 共11页
第九章编译预处理和动态存储分配.ppt_第3页
第3页 / 共11页
亲,该文档总共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 两者的区别: 前者,系统先在当前源程序所在目录内查找指定的包含文件,若找不到,再按系统指定的标准方式到有关目录中去寻找。 后者,系统将直接按照系

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

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

6、的预处理是在编译之前进行的,9.4 典型例题,一、选择题: 2.执行下述程序后,输出的结果是( ) #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=1

7、0; j=15; k=10*MIN(i,j); printf(“%dn”,k); A) 15 B)100 C) 10 D) 150,9.4 典型例题,一、选择题 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备18001539号-1