C/C++培训
美国上市C/C++培训机构

400-111-8989

热门课程

这些华为C++面试题你都做对了吗?

  • 时间:2017-09-15
  • 发布:C++培训
  • 来源:C++职场

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

正确答案:

二者的编译器不同

2、inti=(j=4,k=8,l=16,m=32);printf(“%d”,i);输出是多少?

正确答案:

相当于i=j=4;i=k=8;i=l=16;i=m=32;故最后i=32;

3、#include与#include“file.h”的区别?

正确答案:

相当于i=j=4;i=k=8;i=l=16;i=m=32;故最后i=32;

4、既然C++中有更好的const为什么还要使用宏?

正确答案:

相当于i=j=4;i=k=8;i=l=16;i=m=32;故最后i=32;

5、重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?

正确答案:

从定义上来说:重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。重写:是指子类重新定义复类虚函数的方法。从实现原理上来说:重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。

6、C++和C定义结构的分别是什么。

正确答案:

Clanguage的结构仅仅是数据的结合Cplusplus的struct和class其实具备几乎一样的功能,只是默认的访问属性不一样而已。

7、#include和#include"a.h"有什么区别?

正确答案:

对于#include,编译器从标准库路径开始搜索a.h对于#include"a.h",编译器从用户的工作路径开始搜索a.h

8、#include和#include“filename.h”有什么区别?

正确答案:

前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。

9、C函数可否单独编译?

正确答案:

外部函数,可以在开始引进来

10、请简述以下两个for循环的优缺点

1)for(i=0;i<n;i++)

{

if(condition)

DoSomething();

else

DoOtherthing();

}

2)if(condition)

{

for(i=0;i<n;i++)

DoSomething();

}

else

{

for(i=0;i<n;i++)=""dootherthing();=""}=""

正确答案:

1)优点:程序简洁。缺点:多执行了n-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。

2)优点:循环的效率高。缺点:程序不简洁。

11、完成程序,实现对数组的降序排序

#include

voidsort(intarray[]);

intmain()

{

intarray[]={45,56,76,234,1,34,23,2,3};//数字任//意给出

sort(array);

return0;

}

voidsort(intarray[])

{____________________________________

inti,j,k;

for(i=1;i<=7;i++){if(array[i]>array[i-1])

{

k=ARRAY[i];

j=i-1;

do

{

array[j+1]=array[j];

j–;

}

while(k>array[j]&&j>=0);

array[j+1]=k;

}

}

—————————————————–

}

12、delete[]arry和deletearry一样吗?不一样请说明;

正确答案:

delete[]arry释放的是多个同一类型的地址空间Delete[]arry释放的是一个某种类型的地址空间

13、结合1个你认为比较能体现OOP思想的项目,用UML来描述。

正确答案:

(最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间的一半,并且会问很多问题,一不小心可能会被问住)

14、C与C++各自是如何定义常量的?有什么不同?

正确答案:

C中是使用宏#define定义,C++使用更好的const来定义。区别:1)const是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查,而且在字符替换时可能会产生意料不到的错误(边际效应)。2)有些编译器可以对const常量进行调试,不能对宏调试。

15、头文件中的ifndef/define/endif干什么用?

正确答案:

防止重复定义

16、C++中为什么用模板类。

正确答案:

(1)可用来创建动态增长和减小的数据结构

(2)它是类型无关的,因此具有很高的可复用性。

(3)它在编译时而不是运行时检查数据类型,保证了类型安全

(4)它是平台无关的,可移植性

(5)可用于基本数据类型

17、动态连接库的两种方式?

正确答案:

调用一个DLL中的函数有两种方法:1载入时动态链接(load-timedynamiclinking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。2运行时动态链接(run-timedynamiclinking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。

18、在什么时候需要使用“常引用”?

正确答案:

如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const类型标识符&引用名=目标变量名;

19、预处理器标识#error的目的是什么?

正确答案:

如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。

20、GCC3.2.2版本中支持哪几种编程语言。

正确答案:

这个问题实在变态,就像问你#error的作用是什么一样。不可否认,gcc是linux下一个亮点,是一个备受无数程序员推崇的编译器,其优点省略1000字,有兴趣可以自己查,我翻了翻书,书上曰:支持C,C++,Java,Obj-C,Ada,Fortran,Pascal,Modula-3等语言,这个“等”比较要命,不过我认为已经很全了,如果认为还是不全,干脆把ASM也加上算了,不过那已经不算是编译了。

上一篇:C++入们知识点:C++语言的概述
下一篇:没有下一篇了

C++入们知识点:C++语言的概述

学了C语言到底能做什么,能从事什么工作?

C/C++程序员求职简历模板

2017年腾讯C++开发岗位面试题20道

选择城市和中心
贵州省

广西省

海南省