使用c中的struct访问多个堆栈

时间:2017-06-09 18:44:22

标签: c data-structures struct stack

具体来说,我想访问多个堆栈,目的是从一个堆栈弹出一个元素并将其推入另一个堆栈。所以,我决定使用结构 struct )来访问它们。请考虑以下代码,

    #define MAX 100
    #include <stdio.h>
    #include <string.h>

    struct bag
    {
    int top;
    int arr[MAX];
    }harry,monk;

    int pop(struct bag name);
    void push(int data,struct bag name);

    int main()
    {
    int i,temp;
    harry.top=-1;
    monk.top=-1;
    push(3,harry);
    push(1,harry);
    push(1,harry);
    push(4,harry);

    temp=pop(harry);
    push(temp,monk);

    temp=pop(harry);
    push(temp,monk);

    for (i=0;i<4;i++)
    printf("%d\t%d\n",harry.arr[i],monk.arr[i]);
    return 0;
    }

    int pop(struct bag name)
    {
    int temp=name.arr[name.top];
    name.top=(name.top)-1;
    return temp;
    }

    void push(int data,struct bag name)
    {
    name.top=(name.top)+1;
    name.arr[name.top]=data;
    }

在分析代码后,我发现每次调用函数时,

    void push(int data,struct bag name)
名称 .top 已更改为-1到0,但在调用时已恢复为-1再次。因此,分配给 harry .arr [ harry .top] 的任何vaue最终都会分配给数组 harry .arr [-1] 。       那么,有没有任何想法的人?

2 个答案:

答案 0 :(得分:1)

使用指针,因为现在传递的参数会被复制为函数内的局部参数,因此原始传递值保持不变。

答案 1 :(得分:0)

我很确定这是因为你实际上从未修改过函数中的“堆栈”。 C是按值传递的,这意味着您必须返回结构'name'并将其设置为等于主要内部的harry和monk。

如:

harry = push(3,harry);

此外,您可以使用指针来模拟通过引用场景传递,就像您对当前代码的意图一样。