《C语言课程课件 第十三章 编译预处理和动态存储分配》由会员分享,可在线阅读,更多相关《C语言课程课件 第十三章 编译预处理和动态存储分配(5页珍藏版)》请在金锄头文库上搜索。
1、第13章 编译预处理和动态存储分配 13.1 编译预处理 13.2 动态存储分配13.1 编译预处理宏替换-不带参数#define 宏名 替换文本例如: #define SIZE 100此命令为编译预处理命令,只要在原程 序中名有SIZE的标识符都用100来替换 ,SIZE就相当于100是替身。请分析如下程序: #include #define SIZE 100 main() int a=10,b=20,c;c=a+b+SIZE;printf(“%d”,c); c=a+b+100;#include #define N 2 #define M N+1 #define NUM 2*M+1 main
2、() int i;printf(“%dn“,NUM); 2+1 2*2+1+113.1 编译预处理宏替换-带参数例如: #define MU(X , Y) ( (X) * (Y) ): a= MU(5, 2); b=6/ MU(a+3, a);( (5) * (2) )a= ( (5) * (2) );( (a+3) * (a) )b=6/( (a+3) * (a) );改写: #define MU(X , Y) X * Y: a= MU(5, 2); b=6/ MU(a+3, a);a=5*2; b=6/a+3*a;终止宏定义:#define PI 3.14 main() : #undef
3、PI: 以上PI的作用域从 #define PI 3.14 命令行开始,到 #undef PI命令行 结束。从#undef以后 的PI变成无定义,不再 代表3.14了。13.2 动态存储分配知识点回顾在前面我们学过,在对变量和数组进行定义实质上就是给它们 开辟相应大小的内存单元。我们除了可以用定义的方式来开辟 内存单元,还可以用一些函数来动态的分配和释放内存空间。1。动态分配内存的函数:malloc(size)size必须是无符 号整型,用来表 示开辟几个字节 的内存空间。函数返回值的 类型为void *例如:float *pf;pf=(float *)malloc(4)/*分配了4个字节的存
4、储空间, 再将它强制类型转换成所需 的类型,让pf指向该存储单元*/pf 若有语句段:if( pf != NULL ) *pf=3.83.8如上语句也可以使用sizeof()函数来求得字节数:pf=( float * ) malloc ( sizeof( float ) )3。动态释放空间的函数:free(pf) 、 free(ps) /*此函数没有返回值*/2。动态分配内存的函数(连续的内存):calloc(n,size)/*该函数为分配n个连续的存储空间*/例如:char *ps;ps=(char *)calloc(10,sizeof(char);开辟了10个连续的char类型 的存储单元,由ps指向存储 单元的首地址。习题13.1 有以下程序 #include #define MIN(x,y) (x) #define N 2 #define M N+1 #define NUM (M+1)*M/2 main() int i;for(i=1;i=NUM;i+); printf(“%dn“,i);