中面试中你不可回避的C、C++的问题(一)

基础中的基础

局部变量与全局变量问题 (使用’ ::’)

2.      如何在另个文件中引用一个全局变量 (extern)

3.      全局变量可以定义被多个C文件包含,并且是static

4.      static全局变量就是静态全局变量,static限制了全局变量的作用域

5.      static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝.

6.      程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中

7.      两个栈实现一个队列

8.      atol、atoi、fprintf---将字符串转换成数字

9.      两个数交换

[cpp] view plaincopyprint?

  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. int a = 100,b=1000;
  6. int max = ((a+b)+abs(a-b))/2;
  7. printf("max = %d\n",max);
  8. max = a-b;
  9. char *strs[2] = {"a bigger","b bigger"};
  10. max = unsigned(max) >> (sizeof(int)*8-1);
  11. printf("max = %s\n",strs[max]);
  12. return 0;
  13. }

10.  Extern “C”---extern也可用来进行链接指定.C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,

C语言则不会,因此会         造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,

不要给我生成用于链接的中间函数名。

11.  C++语言的创建初衷是“abetter C”,但是这并不意味着C++中类似C语言的全局变量函数所采用的编译和连接方式与C语言完全相同

12.  假设某个函数的原型为:voidfoo( int x, int y );

13.  该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,

但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,

C++就是靠这种机制来实现函数重载的。例如,在C++中,函数void foo( int x, inty )与void foo( int x, float y )编译生成的符号是不相同的,

后者为_foo_int_float。同样地,C++中的变量除支持局部变量外,还支持类成员变量全局变量。用户所编写程序的类成员变量可能与全局变量同名,

我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。

14.  Volatile

a)volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,

基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。

b)volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.

c)一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。

精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

d)使用的地方:中断服务程序中修改的供其他程序检测的变量,多任务环境下的共享标志,存储器映射的硬件寄存器通常也要加

15.atexit()函数的使用

[cpp] view plaincopyprint?

    1. /*
    2. 很多时候我们需要在程序退出的时候做一些诸如释放资源的操作,但程序退出的方式有很多种
    3. 比如main()函数运行结束、在程序的某个地方用exit()结束程序、用户通过Ctrl+C或Ctrl+break操作来终止程序等等
    4. 因此需要有一种与程序退出方式无关的方法来进行程序退出时的必要处理
    5. 方法就是用atexit()函数来注册程序正常终止时要被调用的函数
    6. atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。
    7. atexit()的函数原型是:int atexit (void (*)(void));
    8. 在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反
    9. 也即最先注册的最后调用,最后注册的最先调用。
    10. */
    11. #include <stdlib.h>
    12. #include <stdio.h>
    13. int atexit(void (*function)(void));
    14. void fn1(void),fn2(void),fn3(void),fn4(void);
    15. int main(void)
    16. {
    17. atexit(fn1);
    18. atexit(fn2);
    19. atexit(fn3);
    20. atexit(fn4);
    21. printf("This is executed first!\n");
    22. return 0;
    23. }
    24. void fn1()
    25. {
    26. printf(" next!\n");
    27. }
    28. void fn2()
    29. {
    30. printf(" executed");
    31. }
    32. void fn3()
    33. {
    34. printf(" is");
    35. }
    36. void fn4()
    37. {
    38. printf("This");
    39. }

http://blog.csdn.net/berguiliu/article/details/20128375

时间: 2024-12-24 04:55:40

中面试中你不可回避的C、C++的问题(一)的相关文章

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

面试中注意3个javascript的问题

JavaScript 是所有现代浏览器的官方语言.因此,各种语言的开发者面试中都会遇到 JavaScript 问题. 本文不讲最新的 JavaScript 库,通用开发实践,或任何新的 ES6 函数.而是讲讲面试中经常出现的 3 个 JavaScript 问题.我问过这些问题,我的朋友说他们也问. 当然不是说你在准备 JavaScript 面试时只要学习这 3 个问题 -- 你还有很多途径去更好的准备即将到来的面试 -- 但面试官很有可能通过下面 3 个问题来判断你了解和掌握 JavaScrip

面试中对Hibernate缓存机制的回答

这是面试中经常问到的一个问题,可以按照下面的思路回答,准你回答得很完美.首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具体的例子.Hibernate缓存的作用: Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据Hibernat

程序员如何快速准备面试中的算法

前言 我决定写篇短文,即为此文.之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法.尽管在微博上简单梳理过,如下图所示: 但因字数限制,特撰此文着重阐述下:程序员如何快速准备面试中的算法,顺便推荐一些相关的书籍或资料. 备战面试中算法的五个步骤 总体来说,备战面试中的算法,分为五个步骤,如下: 1.首选你得确保自己已经掌握好一门编程语言 如果是C的话,推荐Dennis M. Ritchie & Brian W. Kernighan著的<C程序设计语言>,和<

[HTML面试]HTML5 面试中最常问到的 10 个问题

1. HTML5 新的 DocType 和 Charset 是什么?HTML5 现在已经不是 SGML 的子集,DocType 简化为:                  <!doctype html>HTML 5 指定 UTF-8 编码的方式如下:                 <meta charset="UTF-8"> 2. 如何在 HTML5 页面中嵌入音频?HTML 5 包含嵌入音频文件的标准方式,支持的格式包括 MP3.Wav 和 Ogg:<

面试题_125_to_133_Java 面试中其他各式各样的问题

这部分包含 Java 中关于 XML 的面试题,JDBC 面试题,正则表达式面试题,Java 错误和异常及序列化面试题 125)嵌套静态类与顶级类有什么区别?(答案)一个公共的顶级类的源文件名称与类名相同,而嵌套静态类没有这个要求.一个嵌套类位于顶级类内部,需要使用顶级类的名称来引用嵌套静态类,如 HashMap.Entry 是一个嵌套静态类,HashMap 是一个顶级类,Entry是一个嵌套静态类. 126)你能写出一个正则表达式来判断一个字符串是否是一个数字吗?(解决方案)一个数字字符串,只

Android重难点解析——面试中可能被问到的那些问题

这篇项目主要介绍Android中的一些重难点概念,也包括面试中可能被问到的经典问题. 因为这些知识点比较琐碎,不太适合写成一篇文章,所以采用Github管理,内容会首先在Github更新,这里不定时同步,如果你想第一时间收到通知,请关注Github中的该项目. 项目地址 Android重难点解析,欢迎star,follow,将持续分享Android开发知识 文章列表 谈谈你对Application类的理解 Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递? 谈谈

[转载]java面试中经常会被问到的一些算法的问题

Java面试中经常会被问到的一些算法的问题,而大部分算法的理论及思想,我们曾经都能倒背如流,并且也能用开发语言来实现过, 可是很多由于可能在项目开发中应用的比较少,久而久之就很容易被忘记了,在此我分享一下在面试中经常被问到的一些基本的算法,也当做一次知识的巩固. 排序算法的一些特点: * 排序算法的分类如下:* 1.插入排序(直接插入排序.折半插入排序.希尔排序):* 2.交换排序(冒泡泡排序.快速排序):* 3.选择排序(直接选择排序.堆排序):* 4.归并排序:* 5.基数排序.* * 关于

前端面试中的常见的算法问题

虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂的问题,这些基础知识的积累可以帮助我们更好的优化解决思路.下面罗列在前端面试中经常撞见的几个问题吧. Q1 判断一个单词是否是回文? 回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环.比如 mamam redivider . 很多人拿到这样的题目非常容易