c\c++技术面试宝典(梁振宇)

Categories: 工具语言, 读书
Comments: 1 Comment
Published on: 2011 年 11 月 15 日

1、基本数据类型:简单类型(整数类型、字符类型、浮点类型、指针类型、枚举类型和void类型)和结构类型(数组、字符串、记录和文件),基本数据类型(字符型、整型、浮点型)都属于简单型。c\c++基础数据类型有整数型、浮点型和void型,void型不能被定义,仅仅是用于说明函数没有返回值或指针是无类型的。
2、c++中的常量:整型常量、浮点型常量、字符型常量、字符串常量、转义字符常量、地址常量等六种。
3、常量变量区别:常量是不可以改变值的量,变量可以改变值;常量定义时必须初始化,变量可以不初始化;常量不可以寻址,他的地址不允许赋给非常量指针,变量可以寻址;常量有相对较高编译执行效率。
4、操作符又称运算符。按操作数分一元、二元、三元运算符;按功能分算术、关系、逻辑、位、赋值、自增减、箭头、条件、sizeof、逗号操作符等。
5、操作符优先级:有3个是从右向左结合的(单目运算符、条件运算符、赋值运算符),其他都是从左到右结构。优先级有16级。
6、逻辑运算符的特点:注意与(&&)和或(||)的短路效应。
7、自增减操作符在前后的区别。自增减指针的特点。
8、左值,右值区别:变量是左值,可以出现赋值符号左边,常量是右值,只能出现在复制符号右边。
9、变量的定义和初始化方法:程序运行过程中随时可能变化的量,在电脑内存里可以修改的、存在值的命名空间。int a(100);//直接初始化 int b=200; //赋值初始化
10、变量默认初始化规则:内置类型变量根据位置不同初始化不同,函数外定义的都初始化为0,函数内则不自动初始化。类内有构造函数的自动执行构造函数初始化。
11、变量的声明和定义:声明用于向程序表明变量的类型和名称,定义也是一种声明,通过extern关键字声明变量但是不定义它。如 extern int a;//声明但未定义a ,不会分配存储空间,只说明变量定义在程序的其他地方,程序中变量可以声明多次。
12、c++中的作用域:一个作用域优先使用自己作用域内的量。
13、变量的存储类型:存储类型是根据变量的存在时间(生存期)来划分的,分为:静态存储方式和动态存储方式。动态存储变量当程序运行到该变量才为其分配存储空间,运行到该变量作用域结束即自动收回其分配的空间。静态存储变量从程序开始就分配存储空间,直到程序结束才释放其存储空间。
c++中有自动类型(auto,动态类型)、寄存器类型(register,不为其分配空间,直接使用cpu的寄存器)、静态类型(static)、外部类型(extern,用途有两种,一种是同一源程序文件时未定义前使用一个变量,必需先声明;另外一种用途是多个源文件时,要在一个源文件使用另外一个源文件中的全局变量,则在引用前必须进行外部声明。)。
14、引用、const引用、和非const引用:const引用只能引用const量,并且不能修改。
15、c,c++区别:c是结构化编程语言,c++是面向对象的编程语言。
16、变量名的命名规范和匈牙利命名法。
17、逻辑语句,循环控制语句;重载输入输出;文件读写;抛出异常和处理;空定义的展开,include的使用,include如何查找头文件。
18、内存分配和释放,new和malloc的区别和联系

1、new 是c++中的操作符,malloc是c 中的一个函数
2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数
3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。
4、new 和 malloc效率比较
new 有三个字母, malloc有六个字母
new可以认为是malloc加构造函数的执行。
new出来的指针是直接带类型信息的。
而malloc返回的都是void指针。
一:new delete 是运算符,malloc,free是函数
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
我们先看一看malloc/free和new/delete如何实现对象的动态内存管理,见示例。
class Obj{
public :
Obj(void){ cout << “Initialization” << endl; } ~Obj(void){ cout << “Destroy” << endl; } void Initialize(void){ cout << “Initialization” << endl; } void Destroy(void){ cout << “Destroy” << endl; } }; void UseMallocFree(void){ Obj *a = (obj *)malloc(sizeof(obj)); // 申请动态内存 a->Initialize(); // 初始化
//…
a->Destroy(); // 清除工作
free(a); // 释放内存
}
void UseNewDelete(void){
Obj *a = new Obj; // 申请动态内存并且初始化
//…
delete a; // 清除并且释放内存
}
示例用malloc/free和new/delete如何实现对象的动态内存管理
类Obj的函数Initialize模拟了构造函数的功能,函数Destroy模拟了析构函数的功能。函数UseMallocFree中,由于malloc/free不能执行构造函数与析构函数,必须调用成员函数Initialize和Destroy来完成初始化与清除工作。函数UseNewDelete则简单得多。
所以我们不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete。由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。
既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。所以new/delete必须配对使用,malloc/free也一样。
二:new delete在实现上其实调用了malloc,free函数。
三:new operator除了分配内存,还要调用构造函数。
malloc函数只是负责分配内存。

19、虚函数,纯虚函数。
20、指针,概述定义赋值,const指针,指针数组和数组指针区别,函数指针,指针函数与函数指针区别,this指针,引用和值传递,指针引用的区别。
int fun(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=fun; /* 将fun函数的首地址赋给指针f */
21、类和结构区别,抽象类及用途,静态成员在类里可做可选参数,
22、多态,作用,实现。动态多态,静态多态,函数多态,宏多态。
23、继承,派生类可以隐式的自动向基类转化,反之则需在安全情况下强制转化,虚函数,虚函数的作用。
24、构造函数,析构函数的调用时机。类的访问控制,继承方式。复制构造函数,深复制,浅复制,类型转换构造函数。构造函数不能声明成虚函数。
25、c++函数支持参数不定的用法://需要头文件stdarg.h
int max(int num,…){
int m=-0x7fffffff;
va_list ap; //声明一个指针
va_start(ap,num);//指针赋值
for(int i=0;im) m=t;
}
va_end(ap);//释放指针
return m;
}
int main(){
cout<

我猜你可能也喜欢:

Pages: 1 2
1 Comment - Leave a comment
  1. [...] 条款3:尽量以new 和delete取代malloc和free。之前的一篇文章内有详细解释和例子,不再赘述。并且一定不要混用,将会对不同CC++版本造成噩梦般的移植问题。 [...]

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


Welcome , today is 星期二, 2017 年 10 月 24 日