C语言面试题汇总之一

1、static有什么用途?(请至少说明两种)

  • l 限制变量的作用域;
  • 设置变量的存储域。

2、引用和指针有什么区别?

  • 引用必须被初始化,指针不必;
  • 引用初始化以后不能被改变,指针可以改变所指的对象;
  • 不存在指向空值的引用,但是存在指向空值的指针。

3、描述实时系统的基本特征。

  所谓“实时操作系统”,实际上是指操作系统工作时,其各种资源可以根据需要随时进行动态分配。由于各种资源可以进行动态分配,因此其处理事务的能力较强、速度较快。

4、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

  有。全局变量存储在静态区,局部变量存储在(堆)栈区。

5、什么是平衡二叉树?

  它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

6、 堆栈溢出一般是由什么原因导致的?

  • 没有回收垃圾资源;
  • 层次太深的递归调用。

7、如何判断一段程序是由C 编译程序还是由C++编译程序编译的?

  在论坛中看到的两种解释:

  (1)如果是要你的代码在编译时发现编译器类型,就判断_cplusplus或_STDC_宏,通常许多编译器还有其他编译标志宏。   #ifdef __cplusplus cout<<"c++";#else cout<<"c";#endif  如果要判断已经编译的代码的编译类型,就用nm查一下输出函数符号是否和函数名相同。(相同为c,不同为c++。详解见下面)

  (2)简单是说,由于c语言是没有重载函数的概念的,所以c编译器编译的程序里,所有函数只有函数名对应的入口。而由于c++语言有重载函数的概念,如果只有函数名对应的入口,则会出现混淆,所以c++编译器编译的程序,应该是函数名+参数类型列表对应到入口。 注意,因为mian函数是整个程序的入口,所以mian是不能有重载的,所以,如果一个程序只有main函数,是无法确认是c还是c++编译器编译的。可以通过nm来查看函数名入口,如一个函数int foo(int i, float j) ,c编译的程序通过nm查看 foo 0x567xxxxxx (地址) ;c++编译程序,通过nm查看 foo(int, float) 0x567xxxxxx 。另外,如果要在c++编译器里使用通过c编译的目标文件,必须通知c++编译器,我使用的函数是c风格的,不需要列出参数列表的,这样c++编译才能正确的连接。

8、求出两个数的较大值?

  ( (a+b)+abs(a-b))/2;

9、和#define相比,const有何优点?

  Const作用:定义常量、修饰函数参数和修饰函数返回值,被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

  优点:

  1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误;

  2)有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

10、面向对象有哪些特点?

  封装、继承和多态。

11、什么函数不能声明为虚函数?

  虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,设置虚函数须注意:

  • 只有类的成员函数才能说明为虚函数;
  • 静态成员函数不能是虚函数;
  • 内联函数不能为虚函数(要想成为虚函数,必须能够被取到地址.内联函数不能被取到地址所以不能成为虚函数);
  • 构造函数不能是虚函数;
  • 析构函数可以是虚函数,而且通常声明为虚函数。

  类里面“定义”的成员函数是内联的,但是仍然可以成为虚函数,类中定义的成员函数(函数体在类中)能成为虚函数,大部分编译器能够将虽然声明为inline但实际上不能inline的函数自动改为不inline的。至于编译器会不会将inline and virtual的函数照模照样的实现,与编译器及优化方式有关。

  你写inline virtual void f(),不能保证函数f()一定是内联的,只能保证f()是虚函数(从而保证此函数一定不是内联函数)。

  对于问题: 到底内联函数能不能成为虚函数? 
  答案是不能.问题是你不能够确定一个函数到底是不是inline的.inlien关键字只是对编译器的一个建议:"如果有可能,请把此函数搞成inline的"。

12、冒泡排序算法的时间复杂度是什么?

  O(n^2)

13、写出float x 与“零值”比较的if语句。

  if(x>0.000001&&x<-0.000001)

14、Internet采用哪种网络协议?该协议的主要层次结构?

  tcp/ip 应用层(/表示层/会话层)/传输层/网络层/数据链路层/物理层

15、Internet物理地址和IP地址转换采用什么协议?

  ARP (Address Resolution Protocol)(地址解析协议)

16、IP地址的编码分为哪俩部分?

  IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

17、不能做switch()的参数类型是:

  switch的参数不能为实型。

18、用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。

  循环链表,用取余操作做。

19、局部变量能否和全局变量重名?

  答:能,局部会屏蔽全局。要用全局变量,需要使用"::"。

  局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

20、如何引用一个已经定义过的全局变量?

  答:可以用引用头文件的方式,也可以用extern关键字。

  二者区别:如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

21、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

  答:可以,在不同的C文件中以static形式来声明同名全局变量。

  可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

22、语句for( ;1 ;)有什么问题?它是什么意思?

  答:和while(1)相同。

23、do……while和while……do有什么区别?

  答:前一个循环一遍再判断,后一个判断以后再循环。

24、请写出下列代码的输出内容


25、以下是引用片段:
  #include 
  main() 
  { 
  int a,b,c,d; 
  a=10; 
  b=a++; 
  c=++a; 
  d=10*a++; 
  printf("b,c,d:%d,%d,%d",b,c,d); 
  return 0; 
  }

  答:10,12,120

时间: 2024-11-08 22:26:19

C语言面试题汇总之一的相关文章

C语言面试题大汇总

C语言面试题大汇总 1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量.对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内. 2.如何引用一个已经定义过的全局变量? 答: extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引

AJAX笔试面试题汇总

AJAX笔试面试题汇总 Javascript 1. 什么是ajax,为什么要使用Ajax(请谈一下你对Ajax的认识) 什么是ajax: AJAX是“Asynchronous JavaScript and XML”的缩写.他是指一种创建交互式网页应用的网页开发技术. Ajax包含下列技术: 基于web标准(standards-based presentation)XHTML+CSS的表示: 使用 DOM(Document Object Model)进行动态显示及交互: 使用 XML 和 XSLT

超全!iOS 面试题汇总

超全!iOS 面试题汇总 2015-10-20 CocoaChina 作者:Job_Yang 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好

Linux面试题汇总答案

转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5. 链接分为: 硬链接 和 符号链接 .6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息.7. 某文件的权限为:d-rw-_r--_r

Python面试题汇总

原文:http://blog.csdn.net/jerry_1126/article/details/44023949 拿网络上关于Python的面试题汇总了,给出了自认为合理的答案,有些题目不错,可以从中学到点什么,答案如不妥,请指正...... +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [题目:001]| 说说你对zen of python的理解,你有什么办法看到它? Python之禅,Python秉承一种独特

100个iOS开发/设计程序员面试题汇总,你将如何作答?

100个iOS开发/设计程序员面试题汇总,你将如何作答? 雪姬 2015-01-25 19:10:49 工作职场 评论(0)   无论是对于公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,本文作者Cameron Banga从编程.设计.App Store等各个方面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总.一方面,能够帮助HR在短时间内获取更多反馈信息,更好地甄选合适人选,而iOS开发者及设计师在寻找相关工作时,也可作为参考,为面试做好万全准备. 常见问题 你昨天

(转载)c++笔试题汇总

今天去9City笔试才发现很多基本的东西都忘记了,以后面试前要看看这篇文章了!唉,老了! ①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题.比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1. 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历.源代码如下: struct linka {

大数据面试题汇总(不断更新中)

结合自身面试经历,包括BAT.SF.中信等等公司所做的面试题汇总.主要包括以下几大类: 一.spark相关 1.Spark的Shuffle原理及调优? 2.hadoop和spark使用场景? 3.spark如何保证宕机迅速恢复? 4.hadoop和spark的相同点和不同点? 5.RDD持久化原理? 6.checkpoint检查点机制? 7.checkpoint和持久化机制的区别? 8.Spark Streaming和Storm有何区别?  9.RDD机制?  10.Spark streamin

软件测试面试题汇总

软件测试面试题汇总 测试技术面试题    4 1.什么是兼容性测试?兼容性测试侧重哪些方面?    4 2.我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?   5 3.测试的策略有哪些?    5 4.正交表测试用例设计方法的特点是什么?   5 5.描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程?    5 6.描述测试用例设计的完整过程?   5 8.单元测试的策略有哪些?    5 什么是并发?在lordrunne