本章重点
13.1 编译预处理
13.2 动态存储分配 ;13.1 编译预处理
13.1.1 宏替换
1.无参数的宏定义
宏定义是指用一个指定的标识符(即名字)来代表程序中一个字符串。它的一般形式为:
#define 宏名 字符串 或
#define 宏名
例如:
#define SIZE 10
标识符SIZE称为宏名,此命令执行后,预处理程序对源程序中的所有名为SIZE的标识符用10来替换,此过程就称为“宏替换”。 ; 其中,“#”表示这是一条预处理命令,“define”为宏定义命令,“宏名”为一个合法的标识符,“字符串”可以是常数、表达式或语句,甚至可以是多条语句。
说明:
(1)宏定义与变量定义含义不同,它只作字符替换,并不分配内存空间,也不能认为是赋值。
(2)宏定义是用宏名代替一个字符串,是一种机械的置换,不作任何语法检查。
(3)宏定义结尾不必加分号。如果加了分号,则被认为是字符串的一部分,即在预处理时,分号也被一起替换。
(4)替换文本中也可以包含已定义过的宏名。 ;( 5)宏名的有效范围从定义之后到本源文件结束,出了这个文件,宏名便失却了作用
(6)若宏名出现在一对双引号中,将不会产生宏替换。例如,如果ADD是已经定义的宏名,则不能用与它相关的替换文本来替换 printf(“ADD”)中的ADD。
(7)宏定义还可以定义运算符、表达式,甚至可以把输出格式语句作为宏定义。
(8)替换文本并不替换用户标识符中的成分。 ;2.带参数的宏定义
宏定义除了允许定义符号常量外,还可以用于定义带有参数的宏。在宏定义中的参数称为形式参数,简称形参;在宏调用中的参数称为实际参数,简称实参。带参数的宏定义一般形式为:
#define 宏名(形参表) 字符串
在编译预处理时,程序中凡是带实参的宏,一律按#define命令行中指定的字符串从左到右进行替换。 ;13.1.2 文件包含
在用C语言开发程序时,我们可以把一些宏定义按照功能分别存入不同的文件中,当我们需要使用某类宏定义时,就无需在程序中重新去定义,而只要把这些宏定义所在的文件包含在程序的开头就可以了。
文件包含是指一个源程序文件将另一个指定文件的全部内容包含进来,即将另一个文件包含到本文件之中。这一过程通过预处理命令#include来完成。文件包含预处理语句的一般形式为:
#include 包含文件 或
#include “包含文件”; 其中,包含文件名是磁盘中文本文件的名字。例如:
#include stdio.h 或 #include stdio.h
在编译时,预编译程序将用指定文件中的内容来替换此命令行。
13.2 动态存储分配
此前,我们用于存储数据的变量和数组都必须在说明部分进行定义。C编译程序通过定义语句了解它们所需存储空间的大小,并预先为其分配适当的内存空间。这些空间一经分配,在变量或数组的生存期内是固定不变的。所以这种方式也称为“静态存储分配”。
; C语言中还有一种“动态存储分配”的内存空间分配方式,在程序执行期间需要空间来存储数据时,通过申请分配指定的内存空间;当有闲置不用的空间时,可以随时将其释放,由系统另作它用。用户可以通过调用C语言提供的标准库函数来实现动态分配,从而得到指定数目的内存空间或释放指定的内存空间。
13.2.1 malloc函数和free函数
#includestdlib.h
1.malloc函数
malloc函数的调用形式为:
malloc(size)
其中size的类型为unsigned int,函数返回值类型为void*。;2.free函数
free函数调用的形式为:free(p)
p是指针变量,必须指向由动态分配函数malloc分配的地址,free函数将指针p所指的存储空间释放,使这部分空间可以由系统重新支配。此函数没有返回值。;13.2.2 calloc函数
calloc函数的调用形式为:
calloc(n,size);
n和size的类型都为unsigned int型。其返回值的类型为void*。
calloc函数用来给n个同一类型的数据项分配连续的存储空间。每个数据项的长度为size个字节,若分配成功,函数返回存储空间的首地址。否则返回空。由调用calloc函数所分配的存储单元,系统自动设置初值为0。
区别:calloc 初始化为0或者空 malloc不初始化; 例如:
char *ps;
ps=(char *)calloc(10,sizeof(char));
ps=(char *)malloc(10*sizeof(char));
以上语句开辟了
您可能关注的文档
- 龙湖·源著2016年第一季度飞检策划技术总结.ppt
- 高层转料平台方案教材.doc
- 湖北省高速公路安全管理标准化教材.doc
- 湖北省黄冈市2015-2016学年高一下学期期末考试物理带教材.doc
- 湖北省黄冈市2015年中考语文及教材.doc
- kj693煤矿顶板动态监测系统设计方案答题.doc
- 湖北省黄冈市2016年中考物理(含)教材.doc
- 湖北省黄石市2016届中考数学模拟(4月份)含教材.doc
- 高层转料平台施工方案教材.doc
- 高厂变压器检修工艺规程教材.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 原调正谱G小小蝴蝶la farfalletta钢琴伴奏高清打印版.pdf VIP
- 上海大学2024-2025学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- 广发证券-交通银行-601328-零售转型提速,定增落地夯实资本根基.pdf
- 上海大学2024-2025学年第1学期《高等数学(上)》期末考试试卷(A卷)附参考答案.pdf
- 循环系统护理小讲课.pptx
- 建筑屋面西瓦专项施工方案(范本).doc VIP
- 2024年山东铝业职业学院单招综合素质考试题库及答案1套.docx VIP
- 探究TIPS术后支架堵塞的影响因素及抗凝治疗的必要性:基于多维度分析与临床实践.docx
- 成品仓库出货明细表.pdf VIP
- 贵州省黔西南州2025年中考数学试卷及答案.pdf VIP
原创力文档

文档评论(0)