c - '&' 标记之前的 dev c 堆栈语法错误

标签 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    

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

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

有人有想法吗?

最佳答案

您似乎在使用引用传递,这是 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 来更改传递给函数外部函数的参数,只能取消引用它。

关于c - '&' 标记之前的 dev c 堆栈语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12858094/

相关文章:

检查 C 中的特殊字符

c - 如何创建静态常量数组的数组

c - 安全关键系统中的封装

c - C 中的 vector 结构

c - 如何在 C 中使用结构体?

c - 字符串分配给指针字符串数组和动态内存的问题

带指针的 C 输出

C编程二维数组内存布局

c - 调试 SQLite 语句

c - 尝试使用 execvp 在 C 中执行外部命令(在类似 shell 的程序中)