C 教学难点浅析

来源 :中国校外教育·理论 | 被引量 : 0次 | 上传用户:xiaobaitu11
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
   [摘要] 运用new运算符和delete运算符实现动态内存分配,是C 程序分配内存独有的内容。根据对象所在类的不同,创建对象时,调用构造函数的情况各有不同,特别是含有对象成员的派生类对象构造函数的调用顺序比较复杂。很多学生对上述知识点不能正确理解,形成学习障碍。通过参考相关书籍进行大量实验,深入分析研究它们的特点、规律及使用方法,并用于指导教学,收到了好的教学效果。
  [关键词] C 教学难点 动态分配内存 构造函数调用
  
  在对自考学生进行“C 程序设计”学习指导时,发现许多学生总是不能正确解答“动态分配内存”和“构造函数调用”这两个重要的知识点相关的问题。本文就这两个问题进行讨论。
  1 动态分配和释放内存的问题
  1.1问题的提出
  动态分配内存几乎是所有应用程序的重要组成部分。C 提供的动态分配内存是由new和delete两个运算符实现的,在自考教材中多处提到,其中在第10页例1.3和第82页例4.8两处出现如下:
  例1.3 例4.8
  double *p; Point *ptr=new Point[2];
  p=new double[3];……
  ……delete [ ]ptr;//释放内存
  pelete p;//释放内存
  上例中,两次动态定义的均是数组,但采用delete释放内存的方式确不同,且上机运行均能通过编译,从而给人以两种方式均正确的认识。
  但是,在2009年10月全国试卷第49题中,对用data =new T[len]定义的动态数组,给出的标准答案只有一个即“delete[]data;”而不是“delete[]data;”或“delete data;”。到底怎样才是正确的呢?请看下面解答。
  1.2单个对象内存空间的动态分配和释放
  1.2.1动态分配
  一般形式:数据类型*指针名=new数据类型(初值);
  语句作用:通过new语句,动态分配一个能够存储指定数据类型数据的内存单元,并把分配到的内存初始化为某一个可知的初值,同时返回指向内存的开始处的指针。
  注意:初始化部分的类型必须与内存分配的数据类型一致。
  1.2.2释放内存
  一般形式:delete指针名;
   语句作用:告诉系统释放由new分配的单个内存单元。
  几点注意:
  (1)用new为指针分配内存,称为手工分配内存,这种方式分配的内存不能自动释放(由系统定义变量时分配的内存,当不再使用时,系统将会自动释放。),必须用delete手工释放。
  (2)delete必须用在先前已由new成功分配内存的有效指针上,若用在了未用new分配内存的指针上,将会带来严重的问题,比如系统崩溃。
  (3)对于一个用new分配内存的指针,只能用一次delete。
  例1 double *p=new double(3.5);
  ……
  pelete p;
  1.3数组的动态分配及释放
  1.3.1动态分配
  一般形式:数据类型 *指针名=new数据类型[m];
  语句作用:通过new语句动态分配一个由指定的数据类型所要求的连续m个内存单元,并返回指向首个单元开始处的指针。
  注意:分配数组时不能给数组初始化,即不能给定初值。
  1.3.2释放内存
  一般形式:数据类型 []指针名;
  语句作用:告诉系统用[]释放动态分配的数组。
  注意:
  (1)用delete释放一个动态数组时,还必须用[]形式告诉delete释放多大的内空间,否则内存长期占用,很快就会耗尽,造成内存泄漏。
  (2)用delete释放由new分配数组时,只需用[],不必在括号中加数字说明数组长度。
  例2动态分配对象数组。
  #include
  using namespace std;
  class Point{private:int x,y;public:
  Point():x(0),y(0){cout<<"Iitializing default"<  Point(int a,int b):x(a),y(b){
  cout<<"Iitializing "<  Point
其他文献
环境实验室承担着环境专业教学和科研任务,针对环境实验室目前管理体系缺乏、管理制度不完善的现状,开展了建立环境实验室管理体系的探索性研究。本文通过对比研究国外一些的实
计算机专业的教学目标,不仪仪在于本课程的知识学习,还要兼顾后继课程的要求和特点,为计算机专业学生的继续学习打下坚实的基础。本文讨论了计算机专业C语言教学目标与其它专业
[摘要] 国际结算具有理论和实务并存,应用性强,知识领域广泛和操作性强的特点。传统的教学方法已经难以适应当代国际结算课程的发展,存在着教学手段落后、教师重理论,轻实践,本身缺乏实践经验和学生能动性差等三大问题。要解决这些问题,必须引入案例教学。本文分析了《国际结算》课程中采用案例教学的意义,并提出了国际结算案例教学的设计,包括课前准备、案例引入、案例的讨论和案例总结四个步骤。  [关键词] 国际结
本文采用一种简单算法,快速高效地完成了基本流(ES)复用成恒定码率的传输流(TS)。文章分析了基于MPEG-2传输流复用的两种现有技术,即基于节目参考时钟(PCR)包的码率控制和基于缓存