| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4814 人关注过本帖, 1 人收藏
标题:顺序栈的栈顶指针
取消只看楼主 加入收藏
同生缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-11-18
结帖率:0
收藏(1)
 问题点数:0 回复次数:3 
顺序栈的栈顶指针
顺序栈的栈顶指针 当栈满时 指向 最后一个栈元素的上面,那个地址是不属于栈的,
会不会有问题?
注 严版 C语言数据结构
Push函数是这样压栈的
*S.top ++ = e;
栈指针指向刚压入元素的位置的上面。
如果压入之后,刚好满栈了,S.top++后,      那 S.top指向 一个不属于栈的位置。
搜索更多相关主题的帖子: C语言 元素 
2011-01-29 14:22
同生缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-11-18
收藏
得分:0 
如果指向 一个未知的位置 有 风险 的吧 ,有朋友说:。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。

要是想深入了解栈,估计要看操作系统、编译器相关的书籍了。

满肯定有满的情况,不过貌似现在都处理好了,要么提示你非法访问,要么有虚拟内存映射栈空间,

所以在现在应该不会遇到这种情况了吧!

不像以前,内存小的可怜,一不小心就用满了。

理性爱国。
理性上网。
2011-01-29 14:55
同生缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-11-18
收藏
得分:0 
让指针指向数组第0个元素的前面或最末元素的后面,其效果是未定义的!让指针指向数组最末元素后面的那个位置是合法的(但指向0元素前面是非法的),但对这个指针执行间接访问可能会失败,再往后也非法了!(来自《C与指针》)

理性爱国。
理性上网。
2011-01-29 15:13
同生缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-11-18
收藏
得分:0 
有点不同,我有点钻牛角尖了,但精神领会了        你这个是可检测的(NULL),可控(短路),但是我的指针指向 不可测,不可预料指向 那个 敏感的位置,出现奇怪的错误
以下是引用犬虫门心在2011-1-29 15:13:30的发言:u
u
C语言很有意思,它的很多概念是“自满”(自圆其说)的。按照楼主的说法,那么链表中的指针,其危险性不是更大了么?假设有一个单向非循环链表,最后一个节点的next域值为NULL,链表首地址为ipHead,而下面的函数打算遍历链表,并输出数据域的内容,但不处理最后一个节点:
typedef struct LINK
{
    int data;
    struct LINK *next;
}LINK;

void showLink(LINK *ipHead)
{
    for(; ipHead && ipHead->next; ipHead = ipHead->next)
        ;//在这里输出ipHead->data
}
关键是:    for(; ipHead && ipHead->next; ipHead = ipHead->next)划下划线的部分。
我想表达的问题是,按理说如果当前链表是“空链”,其初始的ipHead的值即为NULL,那么ipHead && ipHead->next这个条件判断中的ipHead->next就已经犯了严重错误了!
但事情不是这样的,这个表达式“很安全”,这全都归功于“短路运算”(若不清楚,请百度)。其实,这个问题是“短路运算”之所以能存在的意义所在。
结论:只要我们的程序能够做到“自满”,或者说,我们所提供的程序在逻辑上能够完满,那么,出现“空指针”并不是可怕的事情。关键的逻辑要严谨。


[ 本帖最后由 同生缘 于 2011-1-29 15:26 编辑 ]

理性爱国。
理性上网。
2011-01-29 15:23
快速回复:顺序栈的栈顶指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039449 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved