C - 从 int* 到 int 的无效转换

C - invalid conversion from int* to int

Line 20| Col 15 [Error] invalid conversion from 'ElemArr* {aka int*}' to 'ElemArr {aka int}' [-fpermissive]

我遇到了这个错误,我不确定为什么。我是一名学生,在研究这个问题时,我在尝试使用 'circular array' 概念时遇到了这个具体问题。谢谢!我已经尝试将 ElemArr e[MAX] 更改为 int elem[MAX] 并在那里进行检查,但它仍然不起作用!

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

typedef int ElemArr;

typedef struct{
    ElemArr E[MAX];
    int top;
    int back;
}Queue;

void initQueue(Queue *Q);
void Enqueue(Queue *Q, ElemArr E);

int main(){
    Queue q;
    ElemArr e[MAX] = {4, 21, 65, 12, 17};
    initQueue(&q);
    Enqueue(&q, e);
    return 0;
}

void initQueue(Queue *Q){
    Q->top = 1;
    Q->back = 0;
    printf("Queue is initialized");
}

void Enqueue(Queue *Q, ElemArr E){
    if((Q->back+2) % MAX != Q->top){
        Q->back = (Q->back+1) % MAX;
        Q->E[Q->back] = E;
        printf("Enqueue done");
    }
}

void Dequque(Queue *Q){
    if((Q->back+1) % MAX != Q->top){
        Q->top = (Q->top+1) % MAX;
    }
}

Enqueue(&q, e); 中,eint* 类型,但您将其作为 int 变量传递给 void Enqueue(Queue *Q, ElemArr E); 函数。

您应该将 int 类型的变量传递给 Enqueue 函数的第二个参数。

Enqueue 函数只接受一个 ElemArr 值,但您要传递整个数组。您需要为每个元素单独调用它。变化

Enqueue(&q, e);

for (int i = 0; i < MAX; i++) {
    Enqueue(&q, e[i]);
}