编译预处理和动态存储分配课件

上传人:我*** 文档编号:144026681 上传时间:2020-09-04 格式:PPT 页数:19 大小:46.50KB
返回 下载 相关 举报
编译预处理和动态存储分配课件_第1页
第1页 / 共19页
编译预处理和动态存储分配课件_第2页
第2页 / 共19页
编译预处理和动态存储分配课件_第3页
第3页 / 共19页
编译预处理和动态存储分配课件_第4页
第4页 / 共19页
编译预处理和动态存储分配课件_第5页
第5页 / 共19页
点击查看更多>>
资源描述

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

1、全国计算机等级考试教程C语言程序设计(二级),万红波 烟台大学,第十三章 编译预处理和动态存储分配,编译预处理 动态存储分配,13.1 编译预处理,编辑程序,连接程序,C函数库,产生可执行程序,hello.c,hello.obj,hello.exe,13.1 编译预处理,“#”开头的行预处理命令 预处理命令末尾不加 ;区别于语句 在编译程序进行编译之前,由预处理程序进行处理,hello.c,hello.i,hello.obj,hello.exe,预处理,编译器,链接器,13.1 编译预处理,13.1.1 宏替换 #define 13.1.2 文件包含 #include,13.1 编译预处理,1

2、3.1.1 宏替换 不带参数的宏定义 #define 宏名 替换文本 #define PI 3.1415926,预处理程序对源程序中所有名为PI的标识符替换为3.1415926,13.1 编译预处理,13.1.1 宏替换,#define PI 3.1415 #define ADDPI (PI+1) #define TWO_ADDPI (2*ADDPI) int main() double x=TWO_ADDPI*2; ,#define PI 3.1415 #define ADDPI (3.1415+1) #define TWO_ADDPI (2*(3.1415+1),13.1 编译预处理,13

3、.1.1 宏替换 不能替换双引号中与宏名相同的字符串。 不能替换用户标识符中的成分。 对其他与宏名相同的字符串进行机械的替换操作,#define SIZE 100 int main(0 int a=SIZE; int aSIZE=a*SIZE; printf(“2*SIZE=%d”,SIZE*2); ,13.1 编译预处理,带参数的宏定义 #define 宏名(形式参数表) 替换文本,#define MU(X,Y) (X)*(Y) int main() int m=MU(2,3); int a=3; int b=MU(a+3,a); MU(a+3,a)替换为(a+3)*(a),#define

4、MU(X,Y) (X*Y) int main() int m=MU(2,3); int a=3; int b=MU(a+3,a); MU(a+3,a)替换为(a+3*a),13.1 编译预处理,终止宏定义,#define PI 3.14 int main() . #undef PI . double fun(int x) . ,练习题13.3,/程序的输出结果 #include #define FUDGF(y) 2.84+y #define PR(a) printf(%d,(int)(a) #define PRINT1(a) PR(a); putchar(n) main() int x=2;

5、PRINT1(FUDGF(5)*x); ,练习题13.11,#include #define SWAP(t,x,y) t temp=x;x=y;y=temp; void main() int a=3,b=7; SWAP(int,a,b); printf(%d,%dn,a,b); ,13.1 编译预处理,13.1.2 文件包含 在一个文件中去包含另一个文件的全部内容,/main.c #include “myfun.h” void main() fun(); printf(Hello,World!n); ,/myfun.h extern int fun();,/myfun.c int fun();

6、 printf(“Funn”); return 1; ,13.1 编译预处理,13.1.2 文件包含-头文件,#include void main() printf(Hello,World!n); ,13.2 动态存储分配,静态存储分配:通过定义,分配存储空间; 动态存储分配:在程序执行期间,通过”申请”,分配内存空间,不用的时候可以释放。 用户通过标准的库函数实现动态的存储分配 malloc,calloc,free函数 stdlib.h,13.2 动态存储分配,13.2.1 malloc函数和free函数,malloc函数分配size个字节的存储空间,返回指向存储空间首地址的指针。 返回的地

7、址是void *,要根据需要进行强制类型转换。 动态分配的存储空间只能靠指针来引用。,void *malloc(unsigned int size); void free(void *);,13.2 动态存储分配,13.2.1 malloc函数和free函数,#include #include #define SIZE 10 int main(int argc, char *argv) int *p; p=(int *)malloc(SIZE*sizeof(int); if(p!=NULL) printf(Memory Allocation Success!); *p=23; printf(“

8、*p=%dn”,*p); free(p); return 0; ,13.2 动态存储分配,13.2.2 calloc函数,void *calloc(unsigned int n,unsigned int size),calloc用来给n个,同一类型的数据项分配连续的存储空间,每个数据项的长度为size个字节。若分配成功,函数返回存储空间的首地址;否则返回空。 由调用calloc函数分配的存储单元,系统自动置初值0;,char *ps; ps=(char *)calloc(10,sizeof(char); /ps=(char *)malloc(10*sizeof(char);,练习题13.6,/程序的输出结果 void fun(float *p1,float *p2,float *s) s=(float *)calloc(1,sizeof(float); *s=*p1+*p2+; main() float a2=1.1,2.2,b2=10.0,20.0,*s=a; fun(a,b,s); printf(%5.2fn,*s); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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