标题:这样初始化栈有什么问题?
只看楼主
功夫熊猫
Rank: 2
等 级:论坛游民
帖 子:54
专家分:30
注 册:2010-7-14
结帖率:78.57%
已结贴  问题点数:20 回复次数:20 
这样初始化栈有什么问题?
typedef struct
{
    DataType *base;
    DataType *top;
    int stacksize;
}SeqStack;

void Initial(SeqStack *s)
{
    s->base=(DataType *)malloc(STACK_SIZE*sizeof(DataType));
    if(!s->base)exit(-1);
s->top=s->base;
s->stacksize=STACK_SIZE;
}
能不能用它写一个简单程序?
搜索更多相关主题的帖子: top void 
2010-07-17 14:21
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分:2 
显然有问题,

传值调用,你Initial出来对s没有任何改变。
你应该用2级指针传进去。
2010-07-17 14:24
pykuyuan
Rank: 2
等 级:论坛游民
帖 子:46
专家分:34
注 册:2009-6-26
得分:2 
我是追大D来的。。

逐渐变黑
2010-07-17 16:15
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:2 
回复 2楼 Devil_W
无知。/

我就是真命天子,顺我者生,逆我者死!
2010-07-17 18:55
suntea
Rank: 2
等 级:论坛游民
帖 子:59
专家分:88
注 册:2010-6-24
得分:2 
解释为什么说无知:

值传递时候,,如果改变了指针所指向的内容,那么就是有效的!

只是有2个指针同时指向了相同的内容!

而指向的内容只有一个,那么改变那个内容,就是改变了实参的内容
2010-07-17 21:05
suntea
Rank: 2
等 级:论坛游民
帖 子:59
专家分:88
注 册:2010-6-24
得分:0 
说错了

第一句把值传递 改成址传递

不好意思 喝了点酒,打错字了
2010-07-17 21:12
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
楼主的 函数调用形式都还没给出来,就在那无病呻吟, 好像自己很理解指针似的,
简直就是个不入流的 c 语言菜鸟。

回家吃饭。/

我就是真命天子,顺我者生,逆我者死!
2010-07-17 21:15
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
得分:2 
这c语言的指针 比汇编还恼火  我怎么看来看去看糊涂了。

上面那代码 很类似链表的初始化,在看看 完全就是一个链表的节点

算了 我还是去伺候汇编
2010-07-17 21:15
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
extern "C"{
#define STACK_SIZE 10
    typedef int DataType;

    typedef struct
    {
    DataType *base;
    DataType *top;
    int stacksize;
    int mark; // check this variable 
    }SeqStack;
    
    void Initial(SeqStack *s)
    {
    s->base=(DataType *)malloc(STACK_SIZE*sizeof(DataType));
    if(!s->base)exit(-1);
    s->top=s->base;
    s->mark = -1 ; // 
    s->stacksize=STACK_SIZE;
    }
    void Devil_Initial(SeqStack **s )
    {
    *s= (SeqStack*)malloc(sizeof(SeqStack));
    (*s)->base = (DataType *) malloc(STACK_SIZE*sizeof(DataType));
    if( !(*s) -> base ) 
        exit( 1 );
    (*s)->top = (*s)->base;
    (*s)->mark = -2;
    (*s)->stacksize=STACK_SIZE;
    }
    int main()
    {
    SeqStack *s1=(SeqStack*)malloc(sizeof(SeqStack));// if you do not malloc here , there will be stack error.
    Initial( s1 );
    printf("%d\n",s1->mark);
    SeqStack *s2;// did not malloc here.
    Devil_Initial(&s2);
    printf("%d\n",s2->mark);
    return 0;
    }

}


行了BlueGuy,别TMD装清高了。

我是没看到他里面malloc的是一个成员变量,而不是stack本身。

你有多少水我心里清楚,你心里也清楚。
2010-07-17 21:16
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
我是没看到他里面malloc的是一个成员变量,而不是stack本身。
// 真是恶心到不行, 你也别TM在这里装B了,回去反汇编搞清楚,再出来放屁。/

我就是真命天子,顺我者生,逆我者死!
2010-07-17 21:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-313257-1-1.html




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

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