C/C++培训
达内IT学院
400-996-5531
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也加上算了,不过那已经不算是编译了。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved