摘要:
在排序算法的面试中,面试官喜欢考察的就是插入排序、冒泡排序、归并排序、快速排序这四种排序算法,其中快速排序一般会要求现场写代码,这个要注意一下。这些算法的考察点就是要对算法的特点烂熟于胸,熟悉它们各自的空间复杂度、平均时间复杂度、最差时间复杂度。别的不多说,先来写一个快速排序的代码实现:快速排序代码... 阅读全文
摘要:
转载:http://hi.baidu.com/bellgrade/item/4a4334e8132eed0965db00a6函数名与函数指针一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){MyFun(10);//这里是调用MyFun(10);函数 return 0;}void MyFun(int x) //这里定义一个MyFun函数{ printf(“%d\n”,x);} 这个MyFun函数是一个无返回值的函数,它并 阅读全文
摘要:
这篇文章的内容是一个老生常谈的问题----> 函数是如何被调用的。本文用汇编代码研究函数调用的过程,参数调用的方式,函数值的返回。1. 函数是如何实现调用的 函数的调用是用call 和 ret 指令实现的。这里首先简单说明下这call指令的作用:call指令与跳转指令相似,但是不同的是保持返回信息, 即将下一个指令入栈,当遇到ret的时候,返回到这个地址。 呵呵,有点抽象, 下面就用实例来说明,我们写下如下代码: 1 int add(int a, int b) 2 { 3 return a+b; 4 } 5 6 int _tmain(int argc, _TCHAR* argv[]) 7 阅读全文
摘要:
转载:http://www.cnblogs.com/clor001/p/3329652.html上篇讲述了内存中的封装模型,下篇我们讲述一下继承和多态。二、继承与多态情况下的内存布局由于继承下的内存布局以及构造过程很多书籍都讲得比较详细,所以这里不细讲。重点讲多态。继承有以下这几种情况:1.单一继承2.多重继承3.重复继承4.虚拟继承1.单一继承的场合假设有以下继承关系,那么大致的内存布局如下代码class Parent{public: int p;};class Child:public Parent{public: int c;};class GrandChild:pu... 阅读全文
摘要:
一、封装模型的内存布局常见类对象的成员可能包含以下元素:内建类型、指针、引用、组合对象、虚函数。另一个角度的分类:数据成员:静态、非静态成员函数:静态、非静态、虚函数1.仅包含内建类型的场合:class T{ int data1; char data2; double... 阅读全文
摘要:
5.1 指针于地址指针是一种保存变量地址的变量,指针和数组有着密切的练习。标准C中引入void *代表通用指针类型(具体介绍看其他的博文)在学习指针之前,先看我们的内存是如何组织的:通常机器都有一系列连续编号或编址的存储单元,这些存储但愿可以单个进行操作,也可以以连续成组的方式操作。通常机器的一个字节存储单元可以存放一个char类型的数据,两个相邻的字节存储单元可存储一个short类型的数据,而4个相邻的字节存储单元可存储一个long类型的数据。指针是能够存放一个地址的一组存储单元(通常是两个或4个字节)。例如:变量c的类型是char,指针p是指向c的指针变量,则指针变量的声明:int *ip 阅读全文
摘要:
文章转载地址:http://blog.csdn.net/yming0221/article/details/6249151void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对v... 阅读全文
摘要:
转载自51CTO.com http://developer.51cto.com/art/201107/276154.htm我们都知道,内存基本上分为静态存储区、堆区和栈区三大部分。本文介绍的是C++中的内存分配的问题,希望对你有帮助,一起来看。程序运行时,特别要注意的是内存的分配。下面介绍C++程序设计中的内存分配。一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈区:在执行函数时,函数内局部变量的存... 阅读全文
摘要:
基础知识:栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对栈的插入和删除操作被称为入栈和出栈。有一组CPU指令可以实现对进程的内存实现栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。CPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器中保存当前线程的栈底指针。CPU的EIP寄存器存放下一个CPU指令的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。 接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是. 阅读全文
摘要:
一:引言缓冲区溢出漏洞之所以这么多,是在于它的产生是如此的简单。只要C/C++程序员稍微放松警惕,他的代码里面可能就出现了一个缓冲区溢出漏洞,甚至即使经过仔细检查的代码,也会存在缓冲区溢出漏洞。二:溢出尽管缓冲区溢出也会发生在非C/C++语言上,但考虑到各种语言的运用程度,我们可以在某种程度上说,缓冲区溢出是C/C++的专利。相信我,如果你在一个用VB写的程序里面找溢出漏洞,你将会很出名。回到说C/C++,在这两种使用非常广泛的语言里面,并没有边界来检查数组和指针的引用,这样做的目的是为了提高效率,而不幸的是,这也留下了严重的安全问题。先看下面一段简单的代码:#includevoid main 阅读全文