c中通过引用传递结构

时间:2011-06-28 20:33:49

标签: c function structure

我正在尝试使用链接列表进行简单的堆栈动态实现。 接下来是我的代码。代码没有错误。但是,虽然我相信我通过引用传递结构,但函数内部所做的更改并未反映出来。 虽然我已经能够通过使用全局结构来完成这项工作,但我在这里缺少一个非常基本的概念,所以想知道我在理解错误是什么,如何在不使用的情况下反映在pop函数中所做的更改全球范围。

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 个答案:

答案 0 :(得分:3)

s1=s2;这可能不会做你想要的。您正在修改堆栈的本地副本。

尝试

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;
}

顺便提一下,它在C FAQ中提到。

正如理查德·彭宁顿所提到的,你需要像s1那样声明struct stack *s1;

答案 1 :(得分:0)

您正在将指针传递给堆栈值并尝试更改它。

答案 2 :(得分:0)

正如cnicutar所说,s1 = s2没有做任何有用的事情。你可能想要* s1 = * s2;