【问题标题】:Accessing multiple stacks using struct in c使用 c 中的 struct 访问多个堆栈
【发布时间】:2017-06-09 18:44:21
【问题描述】:

具体来说,我想访问多个堆栈,目的是从一个堆栈中弹出一个元素并将其推入另一个堆栈。因此,我决定使用 structures (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)

name.top 已从 -1 更改为 0,但在调用时又恢复为 -1再次。因此,任何分配给 harry.arr[harry.top] 的值最终都会分配给数组 harry.arr[-1]。 那么,有人有什么想法吗?

【问题讨论】:

  • 请缩进你的代码

标签: c data-structures struct stack


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我很确定这是因为您从未真正修改函数中的“堆栈”。 C 是按值传递的,这意味着您必须返回结构“名称”并将其设置为等于主目录中的 harry 和 Monk。

    如:

    harry = push(3,harry);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2019-03-25
      • 2015-10-16
      • 2019-02-03
      • 2013-09-24
      相关资源
      最近更新 更多