C语言课程以外需补充的内容.doc

C语言课程以外需补充的内容.doc

ID:51687823

大小:73.50 KB

页数:16页

时间:2020-03-15

C语言课程以外需补充的内容.doc_第1页
C语言课程以外需补充的内容.doc_第2页
C语言课程以外需补充的内容.doc_第3页
C语言课程以外需补充的内容.doc_第4页
C语言课程以外需补充的内容.doc_第5页
资源描述:

《C语言课程以外需补充的内容.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一、以下内容是课程中未涉及的部分,但在等级考试中经常出现的1、关于有参宏的内容及其与函数的区别(1)宏定义和宏替换的定义宏定义是将一个标识符(宏名)定义为某个字符串(宏体)。宏定义有不带参数和带参数两种形式:#define标识符字符串#define标识符(参数表)字符串宏替换是用已定义的宏体(字符串)来替换宏名(标识符)。其形式:宏名宏名(参数表)宏定义和宏替换两者的关系:必须先有宏定义,才能再有宏替换,后者是前者的逆操作。例:#defineA(x)x*xmain(){inta=5;printf(“%d”,A(a-1));}程序

2、经替换后的printf语句为:printf(“%d”,a-1*a-1);替换后再编译运行,程序的结果应为-1。注意事项:·宏定义不是C语句,行末不能有分号。·进行宏替换时,要记住只是简单的代换,不能随意增加或减少内容。如上例,程序经替换后的printf语句不应该替换为:printf(²%d²,(a-1)*(a-1));如果需要上述的替换,则应将宏定义修改为:#defineA(x)(x)*(x)·定义带参数的宏定义时,要特别注意括号的正确使用。(2).带参数的宏替换与函数调用的区别l实现的时间不同。宏替换的实现是在编译前完成;

3、而函数调用是在运行时处理的。l实现的方法不同。宏替换只是简单的代换,即用已定义的宏体来替换宏名,它没有控制的转移。而函数调用是将实参传递给形参,然后转去执行调用的函数体,执行完后,返回到调用的地方继续往下执行。l宏定义不存在类型问题,即宏名和参数都是无类型的;而函数的形参和实参必须指出类型,且要求形参和实参的类型要相一致。例:运行结果:F1(1+1)=3F2(1+1)=4#defineF1(x)x*xintf2(intx){returnx*x;}main(){intx=1;printf("F1(%d+1)=%d",x,F1(x+

4、1));printf("f2(%d+1)=%d",x,f2(x+1));}1、有关链表的操作准备:动态内存分配一、为什么用动态内存分配但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是定义一个float型(存在0.5分)数组:floatscore[30];但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大?在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道该班级的学生的人数,那么你就要把数组定义得足够大。这样,你

5、的程序在运行时就申请了固定大小的你认为足够大的内存空间。即使你知道该班级的学生数,但是如果因为某种特殊原因人数有增加或者减少,你又必须重新去修改程序,扩大数组的存储范围。这种分配固定大小的内存分配方法称之为静态内存分配。但是这种内存分配的方法存在比较严重的缺陷,特别是处理某些问题时:在大多数情况下会浪费大量的内存空间,在少数情况下,当你定义的数组不够大时,可能引起下标越界错误,甚至导致严重后果。那么有没有其它的方法来解决这样的外呢体呢?有,那就是动态内存分配。所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内

6、存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于景泰内存分配的特点:1、不需要预先分配存储空间;2、分配的空间可以根据程序的需要扩大或缩小。二、如何实现动态内存分配及其管理要实现根据程序的需要动态分配存储空间,就必须用到以下几个函数1、malloc函数malloc函数的原型为:void*malloc(unsignedintsize)其作用是在内存的动态存储区中分配一个长度为size的连续空间

7、。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。还有一点必须注意的是,当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操作。下例是一个动态分配的程序:#include#includemain(){intcount,*array;/*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/if((array(int*)malloc(10*sizeof(int)))==NULL){printf("

8、不能成功分配存储空间。");exit(1);}for(count=0;count〈10;count++)/*给数组赋值*/array[count]=count;for(count=0;count〈10;count++)/*打印数组元素

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。