#include <stdio.h>
#include <stdlib.h>
#define QUEUESIZE 30
int qfull(int *r)
{
if(*r == QUEUESIZE-1)
return 1;
else
return 0;
}
int qempty(int *f,int *r)
{
if(*f > *r)
return 1;
else
return 0;
}
void enqueue(int item,int q[], int *r)
{
if(qfull(r))
{
printf("Cannot Insert. Queue full.\n");
return;
}
(*r)++;
q[*r] = item;
}
void dequeue(int q[], int *r, int *f)
{
if(qempty(f,r))
{
printf("The queue is empty\n");
return;
}
int item_deleted = q[*f];
(*f)++;
if(*f > *r)
{
*f = 0;
*r = -1;
}
}
void display(int q[], int *f, int *r)
{
if(qempty(f,r))
{
printf("Nothing to display.\n");
return;
}
for(int i=*f; i<=(*r); i++)
{
printf("%d\n",q[i]);
}
}
int main()
{
int f = 0;
int r = -1;
int q[QUEUESIZE];
int item,choice;
while(1)
{
printf("Enter a choice: \n");
printf("1. Enqueue\n");
printf("2. Dequeue\n");
printf("3. Display\n");
printf("4. Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("Enter an item: \n");
scanf("%d",&item);
enqueue(item,q,&r);
break;
case 2:
dequeue(q,&r,&f);
break;
case 3:
display(q,&f,&r);
break;
default: exit(0);
}
}
}
这是我的代码。 当我在主程序中调用enqueue函数时,我使用r而不是&amp; r,它给了我一个warning。
当我在enqueue的定义中调用qfull()函数时,它取得了&amp; r,它给了我warning。
我想知道为什么?
答案 0 :(得分:-1)
当我在主程序中调用enqueue函数时
int main() { ... int r = -1; ... enqueue(item,q,&r)
和
在enqueue
的定义中调用qfull()函数void enqueue(int item,int q[], int *r) { if(qfull(r))
int r
和int * r
未定义相同的r
。
前者是int
,后者是指向int
的指针。