您的位置:首页 > 职场人生

作为程序员,也许其他的也许可以不看,但是这些你值得一看(细节决定成败)

2016-12-26 20:42 656 查看
1、静态变量的初始值为什么是0;

   答:全局变量和静态变量都在静态数据区,他们是在main函数之前就已经创建了,在main函数结束后,才销毁,在代码中根本没有机会初始化他们(万一在函数中使用,他们的值就有可能是随机数,而且在你不赋值的情况下,一直是原来那个值),于是语言及其实现就提供了一个默认的全局初始化器0。

2.什么是初始化,什么是赋值:

   答:初始化是在对象(变量)创建的同时,而赋值是在对象创建后。

3.简单的编译和运行发生什么()

 答:预处理:预处理伪指令、类类型的定义、外部对象的声明、函数原型、标识符、各种修饰符号(const,static,volatile,mutable)和类成员的访问说明符(public ,private,protect);

      运行时:容器的越界,虚函数动态决议、函数的动态链接、动态内存分配、异常处理、RTTI等。

4.NULL是什么?为什么用它初始化指针

   答:NULL就是#define   NULL ((void*)0) 就是将将0这个数字,强转成无类型的地址。

    void* 类型的指针是一个合法的指针,但不是一个有效的指针。1个NULL的指针,是一个合法指针,但不是一个有效指针。

c中void*和其他类型之间是可以互相转化的,但是c++中,任何类型可以转void* 但是void*不可以转成其他的类型。

5、强制转换是不是改变了原来的类型和值?

  答:不是,c和c++不支持两个不同类型的元素运算,除非,隐士的类型转换、强制转换、定义运算符重载函数。

隐式转换:



类型的转换不是改变原来的类型和值,而是生成了一个新的临时变元。他的类型为目标类型。

6.写代码技巧(提高效率的作用)

     1.在if else中,尽量把发生概率大的写在前面。

     2.在多重循环中,如果有可能,将最长的循环放在最内层,最短的循环放在最外层,这样子就能减少cpu的跨切循环次数。优化代码。

      3.&& 中,尽量把易错的放在最前面,||中把正确的放在最前面。

      4.如果循环很大,判断次数多。就把判断放在最外面。

7.c++中传指针和传&的区别

      答:引用的创建和销毁,不会调用对象的构造和析构函数。

              指针,在某写角度看,相当于值传递。

8.getchar()的返回值是什么

     答:也许,用习惯了库中的函数,你就根本没有注意过库中的函数的返回值,那么现在先看看getchar()的返回值,他的返回值为int。

        在写输入的时候,好多人会这样子写getchar() != EOF,那么为什么这样写,EOF又是什么,这就告诉你getchar()蹦到文件结束或发生读错误,他必须返回-1,为了区别其他字符,只好EOF定义为负数,他就是一个宏定义。

9.存储类型;extern,auto,static,register。

    答:局部变量:默认加了auto,除非用了regist或static,register和auto,只能用于声明局部变量和局部常量,

          全局函数默认的是static,

         用register修饰的变量会被直接加载到cpu寄存器中,如果寄存器足以容纳下的话,把那些循环计数器直接加载到cpu的寄存器上,可以避免内存与寄存器频繁的数据交换,因此提高效率。但是现在的编译器会自动的吧那些频率高、体积较小的变量放入cpu寄存器中,因此程序员就不用写register。

10.断言,你知道多少。

        答。断言是个宏而不是一个函数,只在debug版本下,起作用,在release不起作用。当你调用断言失败的时候,我们内部其实调用的是库的abort()函数终止程序。

            断言也不是万无一失的,那么memcpy的时候,你如果传入两个野指针,assert就是去了作用。

11.const提高函数的健壮性。

       答:如果是指针传递,那么加上const就可以防止意外修改指针所指向的内存单元,起到保护作用;如果单纯的值传递,那么就没有比较加上const,因为就算修改里面的值,也不能修改堆栈上实参的值。

12.那些运算符不可以重载。

      答:1  .运算符。

             2 不能重载反引用类成员指针 “.*”

             3 不能重载作用域“ ::”

             4 不能重载三目运算符 “?:”

             5 不能重载sizeof() typeid()

             6 不能重载“#”和“##”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐