VC面试问题

时间:2022-07-13 13:56:15 面试 我要投稿
  • 相关推荐

VC面试问题

1. 函数调用的几种形式:

VC面试问题

cdecl:c declare(C调用约定)的缩写,是C和C++程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,由调用者把参数弹出栈,对于传送参数的内存栈是由调用者来维护的,正因为如此,只有这种调用方式可实现个数不定的入口参数(可变参数)。

stdcall:是pascal程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,被调用的函数在返回前清理传送参数的内存栈。

上两者的主要区别是前者由调用者清理栈,后者由被调用的函清理栈。当然函数名的修饰部分也是不同的。

fastcall:采用寄存器传递参数,特点就是快了。

2.C++中用模板类的好处:

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

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

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

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

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

3.SendMessage和postMessage,GetMessage和peekMessage有什么区别?

postMessage和SendMessage的区别主要是在于是否等待其他程序处理消息,postMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行,而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,postMessage的返回值表示postMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。

peekMessage和GetMessage主要有以下区别:

1.GetMessage将等到有合适的消息时才返回,而peekMessage只是撇下一个消息队列。

2. GetMessage会将消息从队列中删除,而peekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中。

创建线程的方式有三种,MFC的AfxBeginThread,win32ApI的CreateThread和C RunTime的_beginthreadex.其中AfxBeginThread创建线程有创建工作者线程和UI线程之分。

4.OnInitDialog,InitInstance,OnCreate在建立对话框中运行的先后顺序。

答:InitInstance,OnCreate,OnInitDialog.运行顺序从先到后。

5.谈谈C和C++的区别,你是如何理解面向对象思想的?

C和C++最大的区别是他们解决问题的思想是不一样的,C是一个结构化语言,重点在于算法和数据结构,对于C++考虑的是如何构造一个对象模型,使这个模型能配合对应的问题,通过获取对象的状态信息得到输出或实现过程控制。

面向对象是指人们认识客观世界的思维方式,采用基于对象的概念去建立模型

6。Heap与stack的差别。

Heap是堆,stack是栈。

Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。

Stack空间有限,Heap是很大的自由存储区

C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。

程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行

7.Windows下的内存是如何管理的?

内存分配方式有三种:

1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

2.在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

3.从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。


【VC面试问题】相关文章:

华为面试的问题07-11

面试25问题07-12

面试的衣着问题07-11

面试的经典问题与解答07-11

《面试》阅读问题07-11

面试中的问题07-11

面试后的问题07-11

面试问题??07-11

面试准备问题07-11

常用的面试问题07-11