这是我想要完成的堆栈的数组实现。
#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”
我做错了什么?参考调用不正确吗?
答案 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)