在堆栈实现中通过引用调用时出错(C程序)

时间:2015-05-26 19:12:32

标签: c arrays stack pass-by-reference

这是我想要完成的堆栈的数组实现。

 #include<stdio.h>
 #include<stdlib.h>


#define MAX 5


typedef struct
{
    int arr[MAX];
    int top;
}STACK;



//#typedef struct stack STACK;



//---------------------- PUSH  and POP ----------------
//push----
void push(STACK &s, int num)
{
    if (s.top == MAX-1)
    {
        printf("\n\nstack full\n");
        return;
    }
    else
    {
        s.top = s.top + 1;
        s.arr[s.top] = num;
    }
    return;
}
//pop----
int pop(STACK &s)
{
    int num;
    if(s.top == -1)
    {
        printf("\n\nStack is empty\n");
        return s.top;
    }
    else
    {
        num = s.arr[s.top];
        s.top = s.top -1;

    }
    return num;

}

// ---main
int main()
{

    STACK s;

    int popped;
    s.top = -1;

    push(s, 1);
    printf("%d \n",s.top);
    push(s, 2);
    printf("%d \n",s.top);
    push(s, 3);
    printf("%d \n",s.top);


    popped = pop(s);
    popped = pop(s);
    popped = pop(s);
    popped = pop(s);

    printf("%d \n",popped);
    return 0;
}

int main()时,如果我

push(&s,VALUE)

通过引用传递 ,我可以使用

void push(STACK *s, int VALUE)

取消引用它。该计划运作良好。

然而, 当我执行 按引用调用 时:

push(s, VALUE)

和 在通话中,

void push(STACK &s, int value)

我收到错误说“函数调用的参数太多,预期1,有2”

我做错了什么?参考调用不正确吗?

2 个答案:

答案 0 :(得分:0)

在C中通过引用传递,与使用指针是一样的,所以你的代码应该是这样的:

int main(void)
{
    int num;
    num = 10;
    incrementa_num(&num); //Use & when you "call-by-reference" in C
    printf("Num: %d\n", num);
    getch();
    return 0;
}

void incrementa_num(int *num) //And use "*" in the subroutine
{
    *num = *num + 1; 
}

如果你想在C ++中做同样的事情,你应该把“&amp;”当你在子程序中声明变量时。

答案 1 :(得分:0)

传递引用的概念在C ++中。

在C中,它可以互换地用作指针传递。但是,它不能用于在C ++中使用的方式(语法)。

您还可以参考之前关于SO中similar topic的讨论。