2011-06-28 15 views
0

私はリンクリストを使ってスタックの単純な動的実装をしようとしています。 次は私のコードです。コードにはエラーはありません。しかし、関数内で行われた変更は、私が参照によって構造を渡しているとは思えますが、戻って反映されません。 私はグローバルな構造を使ってこの仕事をすることができましたが、ここでは非常に基本的な概念が欠落していますので、何が間違っているのかを知りたがっています。グローバルスコープを使用します。cでの参照渡しの構造体

struct stack 
{ 
    char value; 
    struct stack *next; 
}; 

void push(char a,struct stack *s1) 
{ 
struct stack *s2; 
s2=(struct stack *)malloc(sizeof(struct stack)); 
if(empty(s1)) 
{ 
      s2->value=a; 
      s2->next=NULL; 
      s1=s2; 
} 
else 
{ 
    s2->value=a; 
    s2->next=s1; 
    s1=s2; 
} 
return; 
} 



int main() 
{ 
struct stack s1; 
push(c,&s1); 
printf("%d",s1.value); 
} 

答えて

3

s1=s2;これは、あなたが望むことができない可能性があります。スタックのローカルコピーを変更しています。

はそれがC FAQをint言及されている。なお、

void push(char a,struct stack **s1) 
{ 
    struct stack *s2; 
    s2=(struct stack *)malloc(sizeof(struct stack)); 
    if(empty(*s1)) 
    { 
     s2->value=a; 
     s2->next=NULL; 
     *s1=s2; 
    } 
    else 
    { 
     s2->value=a; 
     s2->next=s1; 
     *s1=s2; 
    } 
    return; 
} 

を試してみてください。

リチャードペニントンが言及しているように、s1のように宣言する必要があります。struct stack *s1;

+1

そして、main()のポインタとしてs1を宣言します。 –

+0

@リチャードペニングンン:-) – cnicutar

0

ポインタを値渡しで渡して、ポインタを変更しようとしています。

0

cnicutarが言っているように、s1 = s2は何も役に立たない。おそらく* s1 = * s2が必要です。

関連する問題