- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译预处理和动态存储分配
编译预处理 宏替换 文件包含 动态存储分配 malloc函数 free函数 calloc函数 1.不带参数的宏定义: 注意 在define?宏名和宏替换文本之间要用空格隔开?宏名不得与程序中的其他名字相同。 例如 #define SIZE 100 编译时,在此命令行之后,预处理程序对源程序中的所有名为SIZE的标识符用100来替换,这个替换过程称为“宏替换”? 1.不带参数的宏定义: 例如 #define PI 3.14 #define ADDPI ( PI +1) #define TWO_ADDPI (2*ADDPI ) 对于表达式: x =TWO_ADDPI /2; 替换后成为: x =( 2*(3.14 +1))/2; 1.不带参数的宏定义: 例如 #define LEAP _YEAR year %4==0\ year %100 ! =0 ||year %400 ==0 ↑ 第一列如果在“\”前或在下一行的开头留有许多空格,则在宏替换时也将加入这些空格? 1.不带参数的宏定义: 2 .带参数的宏定义 例如 #define MU( X, Y) (( X)*( Y)) … a =MU( 5 ,2 ); /*经过宏替换后将成为a =((5)*(2))*/ b =6 /MU( a+3, a ); /*经过宏替换后将成为 a =6 /(( a +3)*( a)) */ 其中, MU( X, Y)简称为“宏”,MU是一个用户标识符,称为宏名,宏名和“(”之间不得留有空格?其后一对圆括号中由若干称为形参的标识符组成,各形参之间用逗号隔开?“替换文本”中通常应该包含有形参? 2 .带参数的宏定义 3 .宏替换和函数调用的区别: 所谓文件包含,是指在一个文件中包含另一个文件的全部内容? #include命令行的形式如下: #include "文件名" 或 #include 文件名 在预编译时,预编译程序将用指定文件中的内容来替换此命令行? 一般用户文件名用双引号括起来,系统文件名用尖括号括起来? 说明 1)包含文件的#include命令行通常写在所用源程序文件的开头,故也把包含文件称作“头文件”?头文件名可以由用户指定,其后缀不一定用“.h”? 2)包含文件中,一般包含有一些公用的#define命令行?外部说明或对(库)函数的原型说明? 3)当包含文件修改后,对包含该文件的源程序必须重新进行编译连接? 4)在一个程序中,允许有多个#include命令行? 5)在包含文件中还可以包含其他文件? 1 .malloc函数 函数的调用形式: malloc( size) 其中,malloc函数返回值的类型为void *;size的类型为unsigned int? 功能:分配size个字节的存储区,返回一个指向存储区首地址的基类型为void的地址?若没有足够的内存单元供分配,函数返回空( NULL)? short int *pi; float *pf; pi =( short *) malloc(2); /* 使pi指向一个short int类型的存储单元 */ pf =( float *) malloc(4); /* 使pf指向一个float类型的存储单元 */ 由于malloc函数返回的指针为void *(无值型),故在调用函数时,必须利用强制类型转换将其转成所需的类型? 1 .malloc函数 函数的调用形式: malloc( size) 其中,malloc函数返回值的类型为void *;size的类型为unsigned int? 功能:分配size个字节的存储区,返回一个指向存储区首地址的基类型为void的地址?若没有足够的内存单元供分配,函数返回空( NULL)? 在动态申请存储空间时,若不能确定数据类型所占字节数,可以使用sizeof运算符来求得? 例如: pi =( int *) malloc ( sizeof ( int) ); pf =( float *) malloc ( sizeof ( float) ); 2 .free函数 函数的调用形式为: free( p); 这里指针变量p必须指向由动态分配函数malloc或calloc分配的地址? 功能:将指针p所指的存储空间释放?此函数没有返回值? char *ps; ps =( char *) calloc (10, sizeof ( char) ); 以上函数调用语句开辟了10个连续的char类型的存储单元,由ps指向存储单元的首地址? 使用calloc函数开辟的动态存储单元,同样可以用free函数释放? 3 . calloc函数 函数的调用形式为: calloc ( n, size); 其
文档评论(0)