【问题标题】:C - invalid conversion from int* to intC - 从 int* 到 int 的无效转换
【发布时间】:2020-01-15 18:40:15
【问题描述】:
Line 20| Col 15 [Error] invalid conversion from 'ElemArr* {aka int*}' to 'ElemArr {aka int}' [-fpermissive]

我收到此错误,但不知道为什么。我是一名学生,在学习这个时,我在尝试使用“圆形阵列”概念时遇到了这个特定问题。谢谢!我已经尝试将 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;
    }
}

【问题讨论】:

  • Eneueue() 的第二个参数是单个ElemArr,但您试图传递e,它是ElemArr 的数组。
  • 需要循环调用Enqueue,将数组的每个元素加入队列中。
  • @WhozCraig 这行不通,他想要一个包含 5 个元素的数组。
  • 是的,我明白了。为不在别名中隐藏简单类型提供更多燃料。 ElemArr 只是一个实际的数组或指针。收回。
  • @Saberton Perchance,如果/当您删除不必要的类型别名 ElemArr 并仅使用 int 时,您的代码会是什么样子?清楚那么问题是什么吗?

标签: c stack queue structure


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    Enqueue(&q, e);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多