2016-12-18 4 views
-3
#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); 
      } 
     } 
    } 

이것은 내 코드입니다. 주 프로그램에서 대기열 기능을 호출 할 때 & r 대신 r을 사용하면 warning이 표시됩니다.포인터 형식 인수를 둘 다 사용하는 경우 함수를 호출 할 때 어떤 장소와 장소에서 필요하지 않은 이유는 무엇입니까?

enquue 정의에서 qfull() 함수를 호출하는 동안 & r을 취하면이 값은 warning이됩니다.

이유를 알고 싶습니다.

답변

-1

내가

int main() 
{ 
    ... 
    int r = -1; 
     ... 
     enqueue(item,q,&r) 

대기열

void enqueue(int item,int q[], int *r) 
{ 
    if(qfull(r)) 
의 정의에 QFULL() 함수를 호출하는 메인 프로그램의 대기열 함수를 호출하고

int rint * r은 동일한 r을 정의하지 않습니다.

전은 int이고 후자는 int을 가리키는 포인터입니다.

+0

더 적절하게 대답 해 주시겠습니까? –

+0

두 인수 모두 int에 대한 포인터를 포함합니다. 내 질문을주의 깊게 읽으십시오. –

+0

@AshwaniJha : 첫 번째 경우에 'r'을 전달합니다.이 'int'는 두 번째로'r'을'int *'로 전달합니다. Plaase 내 업데이트 된 답변을 참조하십시오. – alk