'&'之前的dev c堆栈语法错误代币

时间:2012-10-12 11:29:12

标签: c

我一直在尝试使用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    

但当我把它编译并在codeblocks上编译时,它说

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

有人有想法吗?

2 个答案:

答案 0 :(得分: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来更改传递给函数外部的函数的参数,而只是取消引用它。

答案 1 :(得分: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; 
}