所在的位置: c++ >> 就业前景 >> C面试知识点总结

C面试知识点总结

程序设计基本概念

1、inti=1;

voidmain(){

inti=i;//i是一个未定义的值

}

2、类型转换

C++定义了一组内置类型对象之间的标砖转换:

如果一个操作数的类型是longdouble,另一个操作数将转换成longdouble

如果都不是longdouble,其中一个是double,则另一个转换成double

同理,一个是float,其他的转换成float

如果两个操作数都不是3种浮点数类型之一,它们一定是某种整值类型,在确定共同的目标提升类型之前,编译器将在所有小于int的整值类型上施加一个被称为整值提升的过程。

3、运算符问题

1)unsignedchara=0xA5;

uUnsignedcharb=~a4+1;

coutb;//结果是,因为寄存器是16位的

2)用一个表达式,判断一个数X是否是2N次方,不可用循环

!(X(X-1))

3)下面代码:

return(xy)+((x^y)1)(,)=

4)不用if等判断语句,找出两个数中较大的值

intmax=((a+b)+abs(a-b))/2

5)如何将两个值进行交换,并且不适用任何中间变量

a=a^b;b=a^b;a=a^b;

4、C和C++的关系

1)在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”

C++提供了C连接交换指定符号解决名字匹配问题

2)头文件中的ifndef/define/endif

防止该头文件被重复引用

预处理、const与sizeof

1、宏定义

1)用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量:

#defineFIND(struc,e)(size_t)(((struc*)0)-e

指针和引用

1、classA{public:inta;A(){a=1;}voidprint(){couta;};

classB:publicA{public:inta;B(){a=2;}};

Bb;b.print();coutb.a;//结果是12

2、函数指针

1)float(**def)[10]def是一个二级指针,它指向的是一个一维数组的指针,数组元素是float

2)double*(*gh)[10]gh是一个指针,它指向一个一维数组,数组元素都是double*

3)double(*f[10])()函数指针数组,f是一个数组,元素是函数的指针

4)int*((*b)[10])一维数组的指针

5)Long(*fun)(int)函数指针

6)Int(*(*F)(int,int))(int)F是一个函数的指针,指向的函数的类型是有两个int参数并且返回一个函数指针的函数,返回的函数指针指向有一个int参数且返回int的函数

7)int(*ptr)[]指向整形数组的指针

8)int*ptr[]指针数组

9)int(*a[10])(int)一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整形值

3、指针数组和数组指针

1)inta[]={1,2,3,4,5}

int*ptr=(int*)(a+1)//a+1指向数组后面

cout*(ptr-1);//输出5

2)C++中有了malloc/free,为什么还需要new/delete

对于非内部数据类型的对象而言,只用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前需要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。New和delete不是库函数,是运算符

4、指针和句柄

1)句柄和指针的区别和联系是什么?

句柄是一种指向指针的指针

句柄和指针其实是两个截然不同的概念。Windows系统用句柄标记系统资源,隐藏系统的信息。你只要知道有这个东西,然后去调用就行了,它是个32bit的unit。指针则标记某个物理内存地址,两者是不同的概念

STL模板与容器

1、泛型编程

1)什么事泛型编程?

STL代表用一致的方式编程是可能的。它并不是试图用C++编程,只是试图找到一种正确的方式来处理软件,寻找一种可以表达我们的想法的语言而已。泛型编程是一种基于发现高效率算法的最抽象表示的编程方法,也就是说,以算法为起点并寻找能使其工作有效率的最一般的必要条件集,并且这些必要条件有多种不同的实现方式。

继承与接口

1、以下代码的输出结果是什么?

classA{protected:intm_data;public:A(intdata=0){m_data=data;

intGetData(){returndoGetData();}virtualintdoGetData(){returnm_data;}};

classB:publicA{protected:intm_data;public:B(intdata=1){m_data=data;

intdoGetData(){returnm_data;}};

classC:publicB{protected:intm_data;public:C(intdata=2){m_data=data;}}

c.GetData()—C未定义,调用B中,B未定义,调用A中。A中为虚,调用B中

c.A::GetData()—A为虚,C未定义,调用B中

c.A::doGetData()—直接调用A中

2、三种继承方式

公有继承:基类的公有成员和保护成员可见,基类的公有成员和保护成员作为派生类得成员时,它们都保持原有的状态;基类的私有成员不可见,基类的私有成员仍然是私有的。在公有继承时,派生类的对象可以访问基类中的公有成员,派生类的成员函数可以访问基类的公有成员和保护成员。

私有继承:基类的共有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类访问。

保护继承:基类的公有成员和保护成员都作为派生类的保护成员。

例:classParent{public:Parent(intvar=-1){m_nPub=var;m_nptd=var;m_nptr=var;}

public:intm_nPub;protected:intm_nptd;private:intm_nPtr;};

classChild1:publicParent{public:intGetPub(){returnm_nPub;};

intGetPtd(){returnm_nPtd;};intGetPtr(){returnm_nPtr;};};

classChild2:protectedParent{public:intGetPub(){returnm_nPub;};

intGetPtd(){returnm_nPtd;};intGetPtr(){returnm_nPtr;};};

classChild3:privateParent{public:intGetPub(){returnm_nPub;};

intGetPtd(){returnm_nPtd;};intGetPtr(){returnm_nPtr;};};

Child1cd1;Child2cd2;Child3cd3;intnVar=0;

cd1.m_nPub=nVar;

cd1.m_nPub=nVar;//父类保护变量,可以被公有继承派生类对象访问但不可以修改

nVar=cd1.GetPtd();

cd2.m_nPub=nVar;//保护继承的派生类对象不可以直接修改父类的公有变量

nVar=cd2.GetPtd();

cd3.m_nPub=nVar;

nVar=cd3.GetPtd();//私有继承的派生类对象可以通过函数访问父类的保护变量

位运算与嵌入式编程

1、建立一个联合体下面的程序运行结果是什么?

union{chara;inti;}u;u.i=0xf0f1f2f3;

couthexu.i;//f0f1f2f3

couthexint(u.a);//f3内存中数据低位字节存入低地址,数据的地址用低地址表示

2、写出程序运行结果

int*pa=NULL;int*pb=pa+15;

printf(“%x”,pb);//15*4=60,60的十六进制结果是3C

3、嵌入式编程

中断服务子程序(ISR):ISR不能反悔一个值;ISR不能传递参数;ISR应该是短而有效率的,在ISR中做浮点运算是不明智的;在ISR中一般不使用printf().

4、关键字volatile有什么含义?一个参数可以既是const又是volatile吗?指针可以是volatile吗?

定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会假设这个变量的值了,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

可以既是const又是volatile,一个例子是只读寄存器

可以是指针,一个例子是当一个终端服务子程序修改一个指向buffer的指针时

5、设置一绝对地址的值

Int*ptr;ptr=(int*)0x67a9;*ptr=0xaa55;

6、unsignedint







































北京手术治疗白癜风费用
北京哪有看白癜风的



转载请注明:http://www.nydjfy.com/jyqj/1079.html

  • 上一篇文章:
  •   
  • 下一篇文章: