作为程序员,也许其他的也许可以不看,但是这些你值得一看(细节决定成败)
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 不能重载“#”和“##”
答:全局变量和静态变量都在静态数据区,他们是在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 不能重载“#”和“##”
相关文章推荐
- 如何让程序员幸福工作:细节决定成败
- 如何让程序员幸福工作:细节决定成败
- Template Method 在一个方法中实现一个算法,但是推迟定义算法中的某些步骤,从而使其他的类可以重新定义这些步骤
- 细节决定成败-在营销过程中的这些细节,你有注意到吗?
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- 细节也可以决定网站中交互设计的成败
- 细节也可以决定网站中交互设计的成败
- 如何成为一个优秀的JAVA程序员 如何成为高级JAVA程序员 细节决定一个程序员的成败
- 为 Intent extra 定义键时最好使用应用的软件包名称作为前缀。这可以确保在您的应用与其他应用交互过程中这些键始终保持唯一。
- 程序员如何幸福工作:细节决定成败
- 决定成败的49个细节
- 牛牛和15朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成26份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地,作为牛牛最好的朋友,你希望牛牛取得的田地价值和尽可能大,你知道这个值最大可以是多少吗? 输入两个整数n和m(1≤n,m≤75)表示田地的大小,接下来n行,每行包括m个0-9之间的数字,表示每块
- 细节决定成败--职场心得
- 细节决定成败-同声传译中的非语言要素
- C++中的虚函数(virtual function) (细节,决定成败)
- 培养男孩---细节,决定家庭教育的成败!
- 细节决定成败:java中,是不是无法import默认包中的类?
- 软件设计是怎样炼成的(7)——细节决定成败(详细设计)
- 已定义的函数有返回值,函数调用可以作为一个函数的实参,但是不能作为形参
- 49个决定成败的人生细节