第13章-编译预处理和动态存储分配_第1页
第13章-编译预处理和动态存储分配_第2页
第13章-编译预处理和动态存储分配_第3页
第13章-编译预处理和动态存储分配_第4页
第13章-编译预处理和动态存储分配_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章重点13.1编译预处理13.2动态存储分配第13章编译预处理和动态存储分配13.1编译预处理预编译处理:在C源程序编译前,由编译预处理程序对编译预处理命令行进行处理的过程。编译预处理命令行:#开头,末尾无分号;如#include<stdio.h>#include<math.h>#definePI3.1413.1.1宏替换1.不带参数的宏定义宏定义的一般形式为:#define宏名替换文本例如:#defineSIZE10标识符SIZE称为宏名,此命令执行后,预处理程序对源程序中的所有名为SIZE的标识符用10来替换,此过程就称为“宏替换〞。2.带参数的宏定义在宏定义中的参数称为形式参数,简称形参;在宏调用中的参数称为实际参数,简称实参。带参数的宏定义一般形式为:#define宏名〔形参表〕字符串在编译预处理时,程序中但凡带实参的宏,一律按#define命令行中指定的字符串从左到右进行替换,原来没有括号的,不能自己加括号。注意:宏定义和函数调用的区别。3.终止宏定义:#undefSIZE习题P18213.113.213.313.1.2文件包含:指一个源程序文件将另一个指定文件的全部内容包含进来,即将另一个文件包含到本文件之中。这一过程通过预处理命令#include来完成。文件包含预处理语句的一般形式为:#include<包含文件>或#include“包含文件〞#include<stdio.h>包含输入输出函数#include<math.h>包含数学函数#include<stdlib.h>包含动态存储分配函数#include<string.h>包含字符串处理函数#include<ctype.h>包含字符处理函数在编译时,预编译程序将用指定文件中的内容来替换此命令行。13.2动态存储分配静态存储分配:用于存储数据的变量必须在说明局部进行定义,并预先为其分配适当的内存空间,在变量生存期内是固定不变的。动态存储分配:在程序执行期间需要空间来存储数据时,通过申请分配指定的内存空间;当有闲置不用的空间时,可以随时将其释放。13.2.1malloc函数和free函数1.malloc函数malloc函数的调用形式为:malloc〔size〕其中size的类型为unsignedint,函数返回值类型为void*,即返回一个指向存储区首地址的基类型为void的地址。由动态分配得到的存储单元没有名字,只能靠指针引用。在动态申请存储空间时,假设不能确定数据类型所占字节数,可用sizeof运算符求得。例如:int*pi;float*pf;pi=(int*)malloc(sizeof(int));pf=(float*)malloc(sizeof(float));2.free函数free函数调用的形式为:free(p)p是指针变量,必须指向由动态分配函数malloc分配的地址,free函数将指针p所指的存储空间释放,使这局部空间可以由系统重新支配。此函数没有返回值。13.2.2calloc函数调用形式为:calloc(n,size);其返回值的类型为void*。calloc函数用来给n个同一类型的数据项分配连续的存储空间。每个数据项的长度为size个字节,假设分配成功,函数返回存储空间的首地址;否那么返回空。由调用calloc函数所分配的存储单元,系统自动设初值0。例如:char*ps;ps=(char*)calloc(10,sizeof(char));以上语句开辟了10个连续的char类型的存储单元,由ps指向存储单元的首地址。每个存储单元可以存放一个字符。显然,使用calloc函数开辟的动态存储单元相当于开辟了一个一维数组。函数的第一个参数决定了一维数组的大小;第二个参数决定了数组元素的类型。函数的返回值就是数组的首地址。使用calloc函数开辟的动态存储单元,同样用free函数释放。调用形式:free(p)P184习题13.12请编写程序,利用malloc函数开辟动态存储单元,存放输入的三个整数,然后按从小到大的顺序输出这三个数。#include<stdio.h>#include<stdlib.h>voidmain(){int*p1,*p2,*p3,t;//指针变量p1、p2、p3指向新开辟的存储单元p1=(int*)malloc(sizeof(int));//指针变量p1指向一个新开辟的int类型的单元p2=(int*)malloc(sizeof(int));//返回值为指向存储区首地址基类型为int的地址p3=(int*)malloc(sizeof(int));printf("inputthreenumbers:");scanf("%d%d%d",p1,p2,p3);printf("*p1=%d,*p1=%d,*p1=%d.\n",*p1,*p2,*p3);if(*p1>*p2){t=*p1;*p1=*p2;*p2=t;}i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论