欢迎来到天天文库
浏览记录
ID:51583757
大小:820.00 KB
页数:11页
时间:2020-03-24
《编译预处理和动态存储分配.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章编译预处理和动态存储分配考试要点一、考核知识点(3%左右):1.宏定义、不带参数的宏定义、带参数的宏定义2.文件包含处理3.动态存储分配二、重要考点:1.理解并会使用宏定义2.使用常用函数的“文件包含”。9.1宏定义考点1不带参数的宏定义不带参数的宏定义命令形式如下:#define宏名替换文本在define宏名和宏替换文本之间要用空格分隔开。说明:宏名一般习惯用大写字母表示,宏替换的过程实质上是原样替换的过程。宏定义可以减少程序中重复输写某些字符串的工作量。考点2带参数的宏定义定义的一般形式是:#define宏名(参数表)字符串宏定不
2、只进行简单的字符串替换,还要进行参数替换,例如:#defineMV(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关于动态存储的函数我们知道,构成链表结构的每一个节点,是在需要时由系统自动分配存储的,即需要时才开辟一个节点的存储单元。考点4malloc()函数函数原型为:void*malloc(unsignedintsize);该函数的作用是系统自动在内存的动态存储区中,分配长度为size的一段连续空间,若此函数执行成功,返回指向被分配区域的起始地址的指针,若失败,则函数返回值为空指针(NULL)。考点5calloc()函数函数原型为:void*cal
5、loc(unsignedn,unsigenedsize);该函数的作用是系统自动在内存的动态存储区中,分配n个长度为size的连续空间。考点6free()函数函数原型为:voidfree(void*p);该函数的作用是释放由p指向的那段内存空间,使这段存储空间能为他用。P是最近一次调用malloc()或calloc()函数时返回的值,注意:free()函数无返回值。9.4典型例题一、选择题:1.以下叙述中正确的是()A)用#include包含的头文件的后缀不可以是”.a”B)若一些源程序中包含某个头文件,当该头文件有错时,只需对该头文件进行
6、修改,包含此头文件的所有源程序不必重新进行编译。C)宏命令行可以看做是一行C语句D)C编译中的预处理是在编译之前进行的9.4典型例题一、选择题:2.执行下述程序后,输出的结果是()#include#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf(“%d”a);}A)10B)1C)9D)0附:#defineSQR(x)x*xmain(){inta,k=3;a=++SQR(k+1);printf(“%d”,a);}9.4典型例题一、选择题3
7、.以下程序的输出结果是()#defineMIN(x,y)(x)<(y)?(x):(y)#includemain(){inti,j,k;i=10;j=15;k=10*MIN(i,j);printf(“%d”,k);}A)15B)100C)10D)1509.4典型例题一、选择题4.以下程序:#defineN2#defineMN+1#defineNUM(M+1)*M/2#includemain(){inti;for(i=1;i<=NUM;i++);printf(“%d”,i);}A)5B)6C)8D)
8、99.4典型例题一、填空题1.若要使指针p指向一个double类型的动态存储单元,请填空。double*p;p=____malloc(size(double));2.以下程序的输
此文档下载收益归作者所有