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

后台开发面试常被问到的问题(一):什么之间的区别

2017-11-12 16:44 417 查看

后台开发面试常被问到的问题:什么之间的区别笔者在将近半年的求职经历总结

new和malloc区别

1、申请内存位置

2、返回值类型

3、分配内存失败时返回值

4、是否需要指定内存大小

5、是否调用构造、析构函数

6、对数组处理

7、new和malloc相互调用

8、重载

9、重新分配内存

10、客户处理内存不足

 

 

C/C++区别

一、带有默认值的函数

  C++函数的原型中可以声明一个或多个带有默认值的参数

二、Inline函数

C++中在函数调用点,把函数代码展开,是一种更安全(类型检查、编译阶段)的宏。

内联函数没有标准的函数栈帧开辟和回退,没有符号产生,即,内联函数有普通函数区别;内联函数与static函数区别,静态函数产生符号是local的。

三、函数重载

在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。

四、Const区别

C中为常变量,不是必须初始化,不能作为左值;C++中常量,必须初始化,编译阶段进行替换。引用一个编译阶段不明确的值时退化为常变量(同C中)。

五、引用

 C++中的引用是其他变量的别名。定义引用变量开辟内存。

1、必须初始化;

2、初始化的值必须能取地址;

3、引用不能改变;

4、访问引用变量,永远访问的是它所引用的地址

六、动态内存开辟

七、作用域

C全局作用域、局部作用域;

CPP

 

 

指针和引用的区别

 
1、指针是一个变量,只不过存储的是地址,指向内存的一个存储单元;引用只是所引用变量的别名。

2、有const指针;但么const引用。

3、指针可以有多级;引用只能有一级。

4、指针可以为空;引用不可以,在定义时必须初始化。

5、指针在初始化之后可以改变;但引用在初始化之后不能改变。

6、指针sizeof后的大小是指针大小;而引用sizeof的大小所指变量/对象的大小。

7、指针和引用的自增也不同。

8、指针和引用作为参数传递也有区别。

 

 

C++/C指针和数组区别

1、数组:数组名对应一块内存,地址与容量在生命周期内保持不变,只有数组名可以改变。指针:可以随时指向任意内存块,指针更灵活。

2、修改内容 指针如果指向常量字符串,若对其内容进行修改会造成运行时错误。

3、内容复制与比较 数组名不能直接进行复制与比较,否则会产生编译错误;指针直接进行复制与比较只是对地址进行比较与赋值,达不到逾期目标。

4、计算容量 用sizeof可以算出数组所占字节数;而指针只能计算出一个指针的大小。

5、当数组作为函数的参数传递是会退化为同类型的指针。

 

const定义常量与宏定义的区别

 

1.编译器处理方式 
define – 在预处理阶段进行替换 
const – 在编译时确定其值

2.类型检查 
define – 无类型,不进行类型安全检查,可能会产生意想不到的错误 
const – 有数据类型,编译时会进行类型检查

3.内存空间 
define – 不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大 
const – 在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝

4.其他 
在编译时,编译器通常不为const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。 
宏替换只作替换,不做计算,不做表达式求解。

宏定义的作用范围仅限于当前文件。 
默认状态下,const对象只在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。 
如果想在多个文件之间共享const对象,必须在变量定义之前添加extern关键字(在声明和定义时都要加)。

规则 
在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。

参考资料:

http://blog.csdn.net/yingyujianmo/article/details/51206460

 

 

const、volatile区别

   

const和volatile是类型修饰符,语法类似,用于变量或函数参数声明,也可以限制非静态成员函数。

const表示只读类型(指定类型安全性,保护对象不被意外修改);

volatile指定被修饰的对象类型的读操作是副作用(因此读取不能被随便优化合并,适合映射I/O寄存器等)。

 

volatile:确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

  a、当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中,以后再取变量值时,就直接从寄存器中取值。

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

  c、volatile适用于多线程应用中被几个任务共享的变量。

 

 

const和static区别

 
1、const定义的常量在出其作用域之后空间会被释放,而对整个类来说是可变的;但是static定义的静态常量出作用域之后不会被释放。
2、Static表示静态的。类的静态成员变量、静态成员函数是和类相关的,而不是和类的对象相关。即使没有没有具体的对象,也能调用类的静态成员函数、变量。Static静态成员变量不能在类的内部初始化,只能在类内部声明、类外部初始化(且初始化不加static);const成员变量也不能在类内初始化,只能在构造函数的初始化列表进行初始化(即必须有构造函数)。
3、Cosnt成员函数主要目的是防止成员函数修改对象内容;static成员函数主要目的是作为类作用域的全局函数,且不能访问非静态成员变量,没有this指针。
 
参考资料:
http://www.cnblogs.com/phpzhou/p/6390869.html
 
文章著作权归作者所有




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