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 に答える