我一直在尝试使用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
有人有想法吗?
答案 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;
}