C语言使用中的常见问题

来源 :考试周刊 | 被引量 : 0次 | 上传用户:xiner1312
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  我们在C语言的学习和使用过程中经常犯一些小错误或者有很大的疑问,今天特把这些常见问题总结如下,以飨读者。
  
  1. 始化问题
  
  int a[100]={0};能否将数组中所有的元素初试化为零?
  答案是肯定的。因为在为数组初始化的时候,若作者提供的初始化元素个数小于数组长度,系统自动会将其余元素的值定为0。像例子中,初始化时作者只提供了一个元素0给了a,还有99个元素作者没有给出初始值。这时按照上面的规则系统会自动将剩余元素的初始值定为0。以此我们可以得到数组中所有元素初始化为0的结果。
  但我们不提倡这样的做法。一般初始化可以用for循环来实现。
  例:Int I,a[10];
  For(I=0;I<10;I )
  Scanf("%d",a[I]);
  
  2. “文件包含”处理的两种形式的差异
  
  C语言提供了#include命令来实现“文件包含”的操作。
  其一般形式为:①#include"stdio.h"
  ②#include<stdio.h>
  程序运行的时候,①首先在用户当前目录中寻找要包含的文件,若找不到再按标准方式在相对路径下找stdio.h,找不到再到path里面找,而②系统到存放c库函数头文件所在的目录中寻找索要包含的文件,这是标准形式。
  一般说,若为调用库函数而用#include命令来包含相关的头文件,则用②形式以节省时间。若要包含的使用使用户自己编写的文件,一般用①形式。若文件不在当前目录中,①内可以给出文件路径。
  
  3. 宏使用问题
  
  宏替换一般在编译前,所以没有分配任何的空间,没有任何的类型可言,同时它是直接替换宏标号,所以使用一定要小心。例如:#definef(x)x*x
  main( )
  {int i;
  
  i= f(2 3);
  printf("%d\n",i);
   }
  輸出结果是11而不是25,因为它只是简单替换,替换的结果是2 3×2 3,所以输出结果是11而不是25。
  有些人过分地喜欢用宏,其实宏的使用也不是越多越好,要防止代码的膨胀,现在的操作系统基本都是页式管理,当宏替换内容过大发生换页时,宏的效率不会比调用函数快,还好c inline解决了这个问题。
  
  4. 空函数
  
  void f();
   void f(void);
   void f(...);
  通常我理解的空有如下三种形式,它们的含义分别是:
  第一个函数的参数列表不是为空(C 里面是空),它的参数是不确定。
  第二个函数参数才为空。
  第三个函数是可变参数函数,很多库函数都是这样实现的,如:典型的printf(...)。
  
  5. C语言中的参数值的传递
  
  C语言里面只有值传递,即实参的值传给形参(单向传递)。那么有些人会问,那为什么用数组名或数组元素作函数参数的时候我们可以实现形参的值传递给实参呢?
  那是因为一般变量做函数参数时,形参在调用时系统要为他分配存储空间,实参与形参各自占用自己的存储空间,实参的值再复制给形参。数组名或数组元素作函数参数时,在进行存贮空间的分配时,不再为形参另外分配存储空间了,实参与形参共占用同一空间。其实它本质上也是值传递,即形参的值传给形参,只是传的实参的地址而不是参变量的值而已。
  
  6. 数组越界问题
  
  C语言为了追求最大的灵活和效率,不对数组进行边界检查,这些工作都是程序员自己的事情,不要以为你一越界编译器就会告诉你,只有当越界到编译器需要换页的时候才会报错。在理想情况下,Window下可以越界64K,不过很不幸,我试过很多次,最多达到了30k。不过这个数字也是很恐怖的,30k的汇编代码足以对你的操作系统做任何事情。
  7. 数组和指针
  首先必须要搞清楚一个问题,数组是数组,指针是指针,它们不是一回事。
  int a[100];
  int *p ;
  a数组名代表数组的地址值是个常量,它不能够被改变,而p是可以的。
  看看sizeof(a) = 100 和sizeof(p) = 4(vc6.0)
  对于字符串还要看看sizeof和strlen的区别:
  sizeof还是数组的大小,strlen以0结束(不包括0)。大家一定要注意,因为不注意出现问题,你都不知道怎么回事。
  如:
   void f( char * p )
  {
   if ( p == NULL )
   {
  return ;
   }
   char *t ;
   int lenOfP = strlen(p);
   t = ( char *) malloc( sizeof(char) * lenOfP );
   strcpy ( t , p ) ;
   .
   .
  }
  8. malloc 与free
  malloc free使用一般有几个原则:
  (1) malloc free必须配套使用,并且尽可能逆序。
  (2) 谁malloc的谁free。
  (3) 能够不动态分配的尽量不动态分配,动态分配是很费时间的,而且存在一定的风险。
  很多人喜欢这样写程序:
  type * f()
  {
  type *t = (type*)malloc ( sizeof(type));
  .
  .
  return t ;
  }
  这样肯定会出问题,一般像这种情况,一般声明f(type* t),谁调用它谁为t分配空间,谁来释放它的空间。不过很有意思的是,如char* asctime(),它返回一个表示时间的字符指针,但是并不要求你释放,你也没有办法释放,但是我可以肯定它这个串肯定不是在堆区分配的。
  free的顺序也很重要,很多时候free的时候会出现空指针的引用,不足为齐。有人提议free(t);t=NULL;这种用法有一定的道理,当你free一块空间后,操作系统不会立即回收,所以在你再次用t的时候可能还是可以用的,t就成了个野指针,而将其t=NULL后,对t的引用会出问题。
其他文献
关键词:百年;中国共产党;现代化   中图分类号:D616 文献标识码:A 文章编号:1009 — 2234(2021)05 — 0010 — 05   2021年是中国共产党成立一百周年。一百年来,中国共产党带领中国人民实现了民族独立、人民当家作主的伟大历史成就。特别是在中国人实现自身现代化的过程中,经历了武装斗争、解放思想、与时俱进、文化自信等过程,由此也培育了现代中国人的精神风
若问新课改中高中数学最大变化是什么?是算法,绝大多数人会这样说,事实也正是如此。算法原为计算机程序设计的组成部分,现在把它放到高中数学课本的必修部分,充分体现了新课标重应用、重能力的思想。课标中明确指出:通过算法初步的教学,使学生能体会算法的基本思想以及算法的重要性和有效性,初步形成算法思维;发展学生有条理地思考与表达的能力,提高逻辑思维能力,培养理性精神和实践能力。  算法思想源远流长,中国古代
小学数学实践活动课的开展现状不容乐观。很多教师在开展数学实践活动课时,因为缺乏系统的理论和实践的指导,随意性很大,效果很差;有的教师因为怕麻烦,干脆将活动课上成讲授课,这与新课程改革的理念是完成背道而驰的。下面我根据自身的教学实际,从活动内容的角度,谈一谈数学实践活动课的几种类型,与同行共研。    一、生活常识类课型    生活处处有数学,数学处处可以用,而我们在数学学科教学中将许多数学的常识性
2009年全国高考各省的试卷中共出了24题电场部分的选择题,着重考查了中学物理电场部分的重点内容:库仑定律、电场强度、电势、电势能、电场力做功与电势能变化的关系、功能关系在电场中的应用。笔者总结这些习题后发现,有四道习题学生在解题时有一定的难度。四道选择题的解题方法反映出物理新课程改革后,高考物理试题将来的出题趋势。教师在教学中应加强对学生物理思想、物理方法的培养,注重引导学生建立物理模型、分析物
摘 要:档案袋评价是形成性评价中的一个重要评价手段,是一种科学有效的评价方法,符合促进学生全面发展的要求。它可以使每个学生都有追求目标和超越目标的愿望,为学生创造广阔的发展空间,增强学生自我发展的积极性。本文作为湖南女子大学的课题,从档案袋评价的内涵探讨了档案袋评价的应用及意义。  关键词: 形成性评价 档案袋评价 应用 发展    评价是课程的重要组成部分。科学的评价体系是实现课程目标的重要保障
摘 要:教学中教师要倡导求异式的教学方式,有目的、有计划地培养学生敢于思想,为学生创设一个有利于创新的民主氛围,创造一个轻松活跃的思维空间,培养学生锐意进取、敢于怀疑、敢于向书本和权威挑战,不墨守成规的独立意识和创新意识。  关键词:创新 兴趣 求异 想象    发展学生的创新能力,培养创造精神,是语文教育义不容辞的责任。我们在教学中要把创新意识和创造能力的培养放在首位。下面就几个方面来谈谈创新能
摘 要:本文结合目前高职教育的现状,从拓展空间的角度剖析问题,并提出解决的方案。目的在于提高英语教学的效果,为高职生更好地适应社会打下基础。  关键词:英语教学 空间拓展 意义 必要性 实施    英语在诸多学科中是学生比较感兴趣的一门课,然而,对于高职及对口学生感兴趣的往往不是教师讲授的相关知识,而是一些课外知识诸如电影、歌曲以及英美常识之类的,这给授课造成了很大的困难。如果教师能根据所学知识拓
[摘要]亚里士多德的名著《尼各马科伦理学》包含着丰富的幸福观内容。从亚里士多德幸福观的逻辑起点、逻辑展现和逻辑归宿三大方面给予解读,目的是想从新的视角凸显亚里士多德幸福观的内核,深刻把握其幸福观的精髓,以使我们生活得更好。  [关键词]幸福;亚里士多德;尼各马科伦理学;善;德性   [中图分类号]B1 [文献标识码] A [文章编号] 1009 — 2234(2011)03 — 0033 — 02
摘 要:课堂提问是组织课堂教学的中心环节,是一项设疑、激趣、引思的综合性教学艺术。课堂提问的成功与否,关系到单位时间内教学的效果。如果能够在教学中科学地设计并进行课堂提问,就能优化课堂结构,真正发挥教师的主导作用和学生的主体作用,从而展示教师的教学艺术,显示教师的教学魅力。  关键词:课堂 提问 艺术    常言道:学起于思,思起于疑,疑解于问。教学是一门艺术,而课堂提问是组织课堂教学的中心环节。
邓小平同志指出:“教育要面向现代化,面向世界,面向未来。”随着现代科学技术迅速发展,经济全球化程度的加剧,迫切需要学校教育变培养陈旧知识型人才为培养新知识型人才;变培养单一型人才为培养既深且博的多功能人才;變培养知识储存型人才为培养化知识为能力的创新型人才;变培养少规格、低档次、小批量人才为培养多规格、高档次、大批量人才。语文是学习和工作的基础工具,是学习各门学科的基础。学好语文,不但对学好其他学