在C中定义函数中的数组

时间:2014-07-01 09:30:32

标签: c function data-structures

#include     <stdio.h> 
#include    <conio.h>
#include    <stdlib.h>
#define  MAX 5

int insert(int,int,int);
int del(int,int,int);
int display(int,int,int);

void main()    
{    
    int queue[MAX],    front ,    rear;    
    int n;    
    front= -1;    
    rear=  -1;    
    clrscr();    
    while(1)    
    {    
    printf   ("\n Operation on list ");    
    printf   ("\n1: Insert\n 2: Delete\n 3: Display\n 4: Reset\n 5: Exit");    
    printf   ("\nEnter your choise(1/2/3/4/5):");    
    scanf   ("%d",&n);        
    switch (n)    
    {    
        case 1:{    
            insert(queue[MAX], front,rear);    
            break;    
            }    
        case 2:{     
            del(queue[MAX],front,rear);     
            break;     
            }     
        case 3:{      
            display(queue[MAX],front,rear);       
            break;       
            }       
        case 4:{       
            front=-1;       
            rear=-1;       
            break;       
            }       
        case 5:{       
            exit(1);       
                    }       
            }       
        }       
}       
int insert(int queue[MAX],int front,int rear)        
{       
    int i;     
    printf("\n Enter the data");      
    scanf("%d",&i);      
    if(rear==MAX-1)       
    {      
        printf("\nOVERFLOW");       
        return (0);        
    }        
    else if(front==-1)       
    {        
        (front)++;        
        (rear)++;         
        queue[rear]=i;        
            }          
    (rear)++;        
    queue[rear]=i;        
}        
int del(int queue[MAX],int front,int rear)          
{          
    int i;        
    if(front==-1 && rear==-1)         
    {         
        printf("\nUNDERFLOW");          
        return (0);          
    }         
    else if(front==(rear+1))        
    {         
        printf("\nUNDERFLOW");           
        return (0);         
    }         
           else       
    {       
            i=queue[front];       
    (front)++;       
    printf("\nThe element deleted is %d ",i);        
    }       
}         
int display(int queue[MAX], int front, int rear)      
{      
    int i;       
        if(front==-1 && rear==-1)        
    {       
        printf("\nEmptu queue");       
        return (0);       
    }        
    else if(front==(rear+1))      
    {        
        printf("\nNo elements in queue");       
        return (0);      
    }       
    else       
    {       
    printf("\n The elements in queue are :");        
    for(i=front;i<=rear;i++)        
    printf("%d\n",queue[i]);       
    }       
}   

没有编译错误。但我有3次运行时错误 1.未定义的符号insert (int,int,int)
2.未定义的符号display (int,int,int)
3.未定义的符号del (int,int,int)
我认为这是由于阵列的减速。如何在函数初始化中定义数组

4 个答案:

答案 0 :(得分:1)

您需要使用与其定义相同的签名声明您的函数。例如:

int display(int,int,int);

应该是:

int display(int queue[MAX], int front, int rear);

答案 1 :(得分:0)

由于 insert,del,display 的声明和定义,您必须收到编译错误 冲突。

  

以这种方式修改代码

     

原型:

int insert(int *queue,int front,int rear);
int del(int *queue,int front,int rear);
int display(int *queue,int front,int rear);
  

宣言

int insert(int queue[],int front,int rear) {

     ****** insert Operation *******

}

与其他操作相同

  

删除和显示,当你从主调用这些函数时,就像这样调用它们

insert(queue,front,rear);

答案 2 :(得分:0)

2次更改

您应该从queue而不是main()

传递queue[MAX]
insert(queue,front,rear);
del(queue,front,rear);
display(queue,front,rear);

在函数声明中执行此操作:

int insert(int[],int,int);
int del(int[],int,int);
int display(int[],int,int);

更大的问题

代码还有一个问题,变量frontrearinsert()函数中按值传递。

现在这样做是为了纠正它。

声明:int insert(int[],int*,int*);

来自main()insert(queue,&front,&rear);

在定义中这样做:

int insert(int queue[MAX],int *front,int *rear)
{
int i;
printf("\n Enter the data");
scanf("%d",&i);
if(*rear==MAX-1)
{
    printf("\nOVERFLOW");
    return (0);
}
else if(*front==-1)
{
    (*front)++;
    (*rear)++;
    queue[*rear]=i;
        }
(*rear)++;
queue[*rear]=i;
}

del()做同样的事情。没有必要为display()执行此操作。 你的程序现在应该可以正常工作。

答案 3 :(得分:0)

传递数组并不像你的方式。

所以函数调用应该是

insert(queue, front,rear); //same for others

代替

insert(queue[MAX], front,rear);. 

同样声明应

int insert (int queue[],int,int ); //same for others

你必须知道如何pass array as function argument.

您正在传递frontrear个变量作为它的副本(通过值传递)。需要传递他们的地址。

insert(queue, &front,&rear); //same for others

在接收方,您的功能应该是

 int insert (int queue[MAX],int *front,int *rear ) //same for others
 {
   .......
 }

修改

您可以在此处查看已编辑的代码http://pastebin.com/pxX8ZqAj