关于堆栈和指针(指针例子解释很好).doc

关于堆栈和指针(指针例子解释很好).doc

ID:49769676

大小:34.50 KB

页数:13页

时间:2020-03-04

关于堆栈和指针(指针例子解释很好).doc_第1页
关于堆栈和指针(指针例子解释很好).doc_第2页
关于堆栈和指针(指针例子解释很好).doc_第3页
关于堆栈和指针(指针例子解释很好).doc_第4页
关于堆栈和指针(指针例子解释很好).doc_第5页
资源描述:

《关于堆栈和指针(指针例子解释很好).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、关于堆栈和指针堆栈是一种执行“后进先出”算法的数据结构。设想有一个直径不大、一端开口一端封闭的竹筒。有若干个写有编号的小球,小球的直径比竹筒的直径略小。现在把不同编号的小球放到竹筒里面,可以发现一种规律:先放进去的小球只能后拿出来,反之,后放进去的小球能够先拿出来。所以“先进后出”就是这种结构的特点。堆栈就是这样一种数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫做“栈底

2、”。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则。堆栈是计算机中最常用的一种数据结构,比如函数的调用在计算机中是用堆栈实现的。堆栈可以用数组存储,也可以用以后会介绍的链表存储。下面是一个堆栈的结构体定义,包括一个栈顶指针,一个数据项数组。栈顶指针最开始指向-1,然后存入数据时,栈顶指针加1,取出数据后,栈顶指针减1

3、。#defineMAX_SIZE100typedefintDATA_TYPE;structstack{DATA_TYPEdata[MAX_SIZE];inttop;};堆栈是系统使用是临时存储区域。它是后进先出的数据结构。C++主要将堆栈用于函数调用。当函数调用时,各种数据被推入堆栈顶部;函数终止后的返回地址、传递给函数的参数、函数返回的结果以及函数中声明的局部变量等等。因此当函数A调用函数B调用函数C,堆栈是增长了,但调用完成后,堆栈又缩小了。堆是一种长期的存储区域。程序用C++的new操作符分配堆。对new的调用分配所需的内存并返回指向内存的

4、指针。与堆栈不同,你必须通过调用new明确的分配堆内存。你也必须通过调用C++的delete操作符明确的释放内存,堆不会自动释放内存。如果C++中的一个类是定义在堆栈上的,就使用"."开访问它的成员。如果是定义在堆上的,就使用"->"指针来开访问。但在,"->"操作符也可以用在堆栈上的类。什么是指针?和其它变量一样,指针是基本的变量,所不同的是指针包含一个实际的数据,该数据代表一个可以找到实际信息的内存地址。这是一个非常重要的概念。许多程序和思想依靠指针作为他们设计的基础。开始怎样定义一个指针呢?除了你需要在变量的名称前面加一个星号外,其它的和别

5、的变量定义一样。举个例子,以下代码定义了两个指针变量,它们都指向一个整数。int*pNumberOne;int*pNumberTwo;注意到两个变量名称前的前缀’p’了么?这是一个惯例,用来表示这个变量是个指针。现在,让我们将这些指针实际的指向某些东西:pNumberOne=&some_number;pNumberTwo=&some_other_number;‘&’符号应该读作”什么什么的地址”,它返回一个变量在内存中的地址,设置到左侧的变量中。因此,在这个例子中,pNumberOne设置和some_number的地址相同,因此pNumberOn

6、e现在指向some_number。现在,如果我们想访问some_number的地址,可以使用pNumberOne。如果我们想通过pNumberOne访问some_number的值,那么应该用*pNumberOne。这个星号表示解除指针的参照,应该读作“什么什么指向的内存区域”。到现在我们学到了什么?举个例子哟,有许多东西需要理解。我的建议是,如果你有哪个概念没有弄清楚的话,那么,不妨再看一遍。指针是个复杂的对象,可能需要花费一段时间来掌握它。这儿有一个例子示范上面所将的概念。这是用C写的,没有C++扩展。#includevoid

7、main(){//申明变量intnNumber;int*pPointer;//赋值nNumber=15;pPointer=&nNumber;//输出nNumber的值printf("nNumberisequalto:%d",nNumber);//通过pPointer修改nNumber的值*pPointer=25;//证明nNumber已经被改变了//再次打印nNumber的值printf("nNumberisequalto:%d",nNumber);}通读一遍,并且编译样例代码,确信你理解了它为什么这样工作。如果你准备好了,那么继续。一个

8、陷阱!看看你能否发现下面这段程序的毛病:#includeint*pPointer;voidSomeFunction()

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。