基础中的基础

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

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

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

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

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

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

7.      两个栈实现一个队列

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

9.      两个数交换

  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()函数的使用

    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

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

  1. 《PHP程序员面试笔试宝典》——如何克服面试中紧张的情绪?

    本文摘自<PHP程序员面试笔试宝典>. PHP面试技巧分享,PHP面试题,PHP宝典尽在"琉忆编程库". 面试的成功与否,往小的方面讲,直接关系到求职者的工作问题,往大 ...

  2. 在面试中忽然发现DateTime的一些...

    今天说说我面试中碰到的一个小问题,在我问起DateTime为什么无法赋值NULL值,一般第一反应都认为它是值类型,不是引用类型,但随后我查阅了度娘自我学习到它是结构类型,那么随之而然就无法赋值NULL ...

  3. 面试中关于Java你所需知道的的一切

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺. 1. Java中的原始数据类型都有哪些, ...

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

    虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...

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

    我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...

  6. 谈谈如何在面试中发掘程序猿的核心竞争力zz

    早两天看了知乎日报的这篇文章<什么是程序员的核心竞争力?>,caoz讲的几点是让我感同身受.这让我联想起了给程序猿的面试,其实也就是通过短暂的接触来发掘程序猿的核心竞争力.接下来我就谈谈我 ...

  7. java面试中的智力题

    智力题,每个正式的笔试.面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇 ...

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

    这部分包含 Java 中关于 XML 的面试题,JDBC 面试题,正则表达式面试题,Java 错误和异常及序列化面试题 125)嵌套静态类与顶级类有什么区别?(答案)一个公共的顶级类的源文件名称与类名 ...

  9. 面试大总结:Java搞定面试中的链表题目总结

    package LinkedListSummary; import java.util.HashMap; import java.util.Stack; /** * http://blog.csdn. ...

随机推荐

  1. mysql 连接远程服务器

    想要在本地连接远程服务器上的mysql, 需要在远程服务器的mysql配置里面,修改一下访问权限 mysql的配置里面,默认只能本地访问,在服务器上,修改/etc/mysql/my.cnf文件找到这一 ...

  2. (22)python PhantomJS

    下载地址 https://bitbucket.org/ariya/phantomjs/downloads/ 安装 解压后把bin目录下的phantomjs.exe文件复制到C:\Python27\Sc ...

  3. delphi中如何将string类型的字符串数据转化成byte[]字节数组类型的数据

    var  S:String;  P:PChar;  B:array of Byte;begin  S:='Hello';  SetLength(B,Length(S)+1);  P:=PChar(S) ...

  4. IOS开发self.的用法总结

    如果声明的是retain类型的,然后使用self.的话此时引用计数会加1,变成1,如果同时又使用了alloc,那么引用计数又加一变成了2,那么如果只是release一次的话就会内存泄漏. 这种情况下的 ...

  5. Android性能优化第(一)篇---基本概念

    最近打算总结几篇app性能优化方面的东西,毕竟android弄了这么久,万一到哪些转了行,岁月久了就忘记了,纯粹当个人笔记.今个是第一篇---性能优化的基本概念,毛主席说了,让理论先行,理论指导实践. ...

  6. 【python】redis基本命令和基本用法详解

    [python]redis基本命令和基本用法详解 来自http://www.cnblogs.com/wangtp/p/5636872.html 1.redis连接 redis-py提供两个类Redis ...

  7. [置顶] 个人微信号发送zabbix告警信息

    之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛 ...

  8. 模拟登陆web微信的流程和参数细节

    这几天在用python写了一个模拟登陆web微信,发送和接受信息的程序.发现步骤不多,但需要的参数太多了 整个过程中,务必保证session.headers.cookie一致,不然的话,中间会出现登陆 ...

  9. 课程设计之"网络考试系统"(php、Extjs)

    1.TestSystem大概结构框图 2.数据库设计(11张表) 数据库名称:db_testsystem 数据库表: tb_admin 记录题库管理员帐户信息 代码 tb_allcontent 记录随 ...

  10. flask的httponly默认值为True

    如图flask的app.py里显示app的默认配置,httponly默认值为true,所以如果开发者不修改这个配置的话,攻击者是无法通过xss攻击读取浏览器cookie这部分信息的. Cookie:s ...