设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4967|回复: 3

[C] c语言中 栈是怎么一会事,有着什么样的语法,怎么使用,能举例一下吗?

[复制链接]
回帖奖励 1 贡献 回复本帖可获得 1 贡献奖励! 每人限 1 次(中奖概率 50%)

3

主题

1

好友

114

积分

注册会员

Rank: 2

自我介绍
胆小,诚实,对朋友认真,不喜欢说
生肖
星座
双子座
性别
保密

最佳新人

发表于 2013-6-13 21:50:42 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:18 编辑

一直不是很理解栈是什么意思,求高手指导一下!

有什么不知道的地方 可以来yy 4350 哦!那里高手很多。

0

主题

0

好友

104

积分

注册会员

Rank: 2

性别
保密
发表于 2013-6-14 09:31:01 |显示全部楼层

回帖奖励 +1 贡献

本帖最后由 sky_yx 于 2015-12-30 14:18 编辑

我是2群的大叔.
你可以这么理解,栈有PUSH和POP动作,在后一次进入CALL之后,由系统自动分配.
运行过程中,自动管理.
并在每一个CALL RTN之后,自动POP.
堆呢,是一片连续的内存空间,交给用户自己分配,管理,释放....
在C里没有对应的,纯C而言,你记住,但凡malloc的,都要对应一个free...

回复

使用道具 评分 举报

0

主题

0

好友

103

积分

注册会员

Rank: 2

性别
保密
发表于 2013-6-14 09:32:31 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:18 编辑

栈和堆都是进程资源,是一块内存空间,栈由高地址向低地址增长,堆由低地址向高地址增长。栈主要是用来存放一部分局部变量,函数返回的地址。

回复

使用道具 评分 举报

0

主题

0

好友

27

积分

新手上路

Rank: 1

性别
保密
发表于 2013-6-16 20:40:51 |显示全部楼层
本帖最后由 sky_yx 于 2015-12-30 14:18 编辑

栈可以看做是一种顺序相关的数据类型,一般是用在内存中存储数据用的。栈主要有两个操作入栈(push)和出栈(pop)。入栈即把数据保存到栈中,出栈即读取栈中的数据。栈的push,pop操作只能操作栈顶的一个数据元素,而不能随意操作栈中的任意元素,有一定顺序要求。栈就像一个箱子一样,可以存放用户数据,第一个放进去的东西放在箱底,第二个在第二层,最后放进去的在最上面。取东西的时候刚好相反,先取走的肯定是箱顶的东西,最后才是箱底的,也就是所谓的先进后出。
对于细节性的东西可以参考数据结构的知识,堆栈实际可以看做一个对队列、栈等都有很明确的解释。如果用链表来实现堆栈,栈只需要有一个栈底指针和栈顶指针就可以。栈底指针指向堆栈开始的内存位置,如果两个指针指向同一个内存位置就认为栈是空的。没入栈一个数据,栈顶指针就指向新入栈的数据的内存地址。
如果通过线性表结构实现,堆栈就可以通过一个指针和容量大小两个参数来表达。指针指向栈所占用内存开始的位置,每入栈一个数据,栈的容量递增。出栈时容量递减,读取的数据为栈底即指针的位置至栈容量大小的偏移位置的数据。举个例子,你的程序中有函数1和函数2,函数1会调用函数2,函数2运行完毕后会继续运行函数1,现在正运行在函数1中准备调用函数2。
在调用函数2时,操作系统会自动把函数1的运行参数保存到堆栈中,即入栈,以便一会函数2执行完毕后继续执行函数1。入栈的数据可能有函数1的当前代码内存位置,相关参数、变量名称和值等,这个没仔细了解过。
当函数2执行完毕后主程序会接着原来执行的位置继续执行函数1,怎么知道原来执行到哪里呢?通过读取堆栈中保存的运行信息就可以了,这通过出栈操作就可以实现。

回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-3-29 19:38 , Processed in 0.177812 second(s), 33 queries .

回顶部