2

我一直在尝试用 c 在 dev c 上实现一个堆栈,这是我的代码

#include <stdio.h>
#include <stdlib.h>
#define stackinitsize 100
#define stackincrement 10

typedef struct {

    char *base;
    char *top;
    int stacksize;

}sqstack,*s;

Status initstack(sqstack &s)
{
    s.base=(char *)malloc(stackinitsize*sizeof(char));   
    if(!s.base) exit(OVERFLOW);

    s.top=s.base;  
    s.stacksize=stackinitsize;

    return OK; 
}

void push(sqstack &s,char e)
{
    if ((s.top-s.base)>=s.stacksize){

        s.base=(char *)realloc(s.base,(s.stacksize+stackincrement)*sizeof(char));
        if(!s.base) exit (OVERFLOW);
        s.top=s.base+s.stacksize;
        s.stacksize+=stackincrement;
   }

   *s.top++=e;
}

int main(int argc, char *argv[])
{
    char e;

    system("PAUSE");    
    return 0;
}

但它一直在说

error: syntax error before "s"
error: syntax error before '&' token    

但是当我把它放在代码块上编译它时,它说

error: expected ';', ',' or ')' before '&' token

有人有想法吗?

4

2 回答 2

6

您似乎正在使用按引用传递,这是 C++ 功能,而不是 C。

&当你想声明一个指针被传递时,你不能在 C 中使用*push函数也是如此):

Status initstack(sqstack * s)
{
    s->base=(char *)malloc(stackinitsize*sizeof(char));   
    if(!s->base) exit(OVERFLOW);
    s->top=s->base;  
    s->stacksize=stackinitsize;
    return OK; 
}

但是请注意,与 C++ 传递引用不同,您不能通过赋值更改传递给函数的参数到函数之外s,只能取消引用它。

于 2012-10-12T11:31:11.267 回答
0

通过引用传递在内部更改为如下

Status initstack(sqstack &s)
{
    s.base=(char *)malloc(stackinitsize*sizeof(char));   
    if(!s.base) exit(OVERFLOW);

    s.top=s.base;  
    s.stacksize=stackinitsize;

    return OK; 

}

Status initstack(sqstack *s)
{
    (*s).base=(char *)malloc(stackinitsize*sizeof(char));   
    if(!(*s).base) exit(OVERFLOW);

    (*s).top=(*s).base;  
    (*s).stacksize=stackinitsize;

    return OK; 
}

但这是在 C++ 的情况下,在 c 中没有按引用传递的概念,因此使用指针表示法如下。

Status initstack(sqstack * s)
{
    s->base=(char *)malloc(stackinitsize*sizeof(char));   
    if(!s->base) exit(OVERFLOW);

    s->top=s->base; 

    s->stacksize=stackinitsize;
    return OK; 
}
于 2012-10-12T11:42:21.393 回答