黑马程序员c语言教程cc培训专家c面试十大必问题目

2022-05-20 03:01:18   文档大全网     [ 字体: ] [ 阅读: ]

#文档大全网# 导语】以下是®文档大全网的小编为您整理的《黑马程序员c语言教程cc培训专家c面试十大必问题目》,欢迎阅读!
黑马,程序员,题目,面试,语言
路漫漫其修远兮,吾将上下而求索 - 百度文库



C/C++面试十大必问题目

1.Heapstack的差别

答:Heap是堆,stack是栈。

Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。 Stack空间有限,Heap是很大的自由存储区

C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行。

2.In C++, what does "explicit" mean? what does "protected" mean?

答:c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。

protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问

3.c++的一个类中声明一个static成员变量有没有用?

答:在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,也就是说不管创建多少对象,static修饰的变量只占有一块内存。其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。 static是加了访问控制的全局变量,不被继承。

4.关于内存对齐的问题以

答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。

5.C++中为什么用模板?

答:(1)可用来创建动态增长和减小的数据结构 2)它是类型无关的,因此具有很高的可复用性。

3)它在编译时而不是运行时检查数据类型,保证了类型安全 4)它是平台无关的,可移植性

6.动态连接库的两种方式?

答:调用一个DLL中的函数有两种方法:

载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息DLL函数定位。

1


路漫漫其修远兮,吾将上下而求索 - 百度文库



运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary

LoadLibraryEx函数载入DLLDLL载入后,模块可以通过调用GetProcAddress获取DLL数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件

7.关键字volatile有什么含意 并给出三个不同的例子。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器)

2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。

8.What's the difference between "struct" and "class" in c++?

struct成员默认类型为public,class成员默认类型为private。即为数据的封装。 如果没有多态和虚拟继承,C++中,structclass的存取效率完全相同!简单的说就是,存取classdata member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。如果不是为了和C兼容,C++中就不会有struct关键字。

9.New delete malloc free 的区别 ( Autodesk)

答案:用malloc 函数不能初始化对象,new 会调用对象的构造函数。Delete 会调用对象destructor,而free 不会调用对象的destructor.

10. main 函数执行以前,还会执行什么代码? (Autodesk)

答案:main函数执行之前,主要就是初始化系统相关资源: 1.设置栈指针

2.初始化static静态和global全局变量,即data段的内容

3.将未初始化部分的全局变量赋初值:数值型shortintlong等为0boolFALSE指针为NULL,等等,即.bss段的内容

4.运行全局构造器,估计是C++中构造函数之类的吧

5.main函数的参数,argcargv等传递给main函数,然后才真正运行main函数 1)全局对象的析构函数会在main函数之后执行;

2)可以用_onexit 注册一个函数,它会在main 之后执行;

2


本文来源:https://www.wddqxz.cn/7d3b7f29acaad1f34693daef5ef7ba0d4b736dfe.html

相关推荐