"错误:下标值既不是数组也不是指针,也不是矢量"

时间:2015-10-10 23:04:42

标签: c pointers struct

我正在编写一些可以找到以下问题的最佳答案的内容:

  

你有一个整数向量,你必须通过做"翻转"操作,也就是说,给定大小为n的向量中的i位置,你应该切换i和n-1的值,i + 1和n-2的值,依此类推。目标是找到并将矢量按顺序排列的最佳方式,即最小翻转次数

我决定使用A *算法来找到答案,因为找到最佳答案很重要,并且存储我需要的所有信息,我选择使用以下结构:

typedef struct{
            int *v, *flips,g, h;
} node;

其中v将是解决方案的状态,翻转将存储我的选择,g将保存g函数的值,并且h是启发式的值。

因此,为了编写程序,我制作了一个节点类型的向量,如下所示:

estados=malloc(n*sizeof(node));

并且想法是使用节点向量的每个位置来存储状态,以便可以进行比较和扩展等。在大多数情况下,编译器并没有抱怨,但在这些函数中:

int funcaoh(node estados,int n,int goal[], int pos){
    int cont=0, i;
    for(i=0;i<n;i++){
        if(estados[pos].v[i]!=goal[i]){
            cont++;
        }
    }
    return (cont/2);
}

void criaNode(node x[], int n, int pos){
    int i;
    x[pos].v =malloc(n*sizeof(int));
    x[pos].flips =malloc(n*sizeof(int));
    for(i=0;i<n;i++){
        x[pos].flips[i]=-1;
        x[pos].v[i]=-1;
    }
    x[pos].h=0;
    x[pos].g=0;
    return;
}

我收到错误&#34;错误:下标值既不是数组也不是指针,也不是向量&#34;在funcaoh函数的if语句和&#34;警告:内置函数&malloc&#39;不兼容的隐式声明中。 [默认启用]&#34;在第一个 malloc 语句上发出警告,但在第二个奇怪的情况下没有警告。在另外几个类似的代码实例中也会发生同样的情况,我怀疑warnig可能只是以错误的方式使用 malloc ,因为我在其他地方得到了同样的警告,而不是#&# 39;这是一个问题,如:

 entrada=malloc(n * sizeof(int));

但主要的是让结构向量工作,因为它显然是程序成功的必要组成部分。如果我猜测,我想它与使用struct作为向量有关,也许它不像我认为的那样工作?但我不知道。

P.S。我是巴西人,所以代码的某些部分是用葡萄牙语写的,大多数只是变量和函数的名称,如果有必要我可以翻译它们。

1 个答案:

答案 0 :(得分:2)

funcaoh()

int funcaoh(node estados,int n,int goal[], int pos){

estados是一个简单的结构,而不是指向结构的指针,所以你不能下标它等等。这就是编译器所说的;我不得不同意。

你可能需要其中一种(它们相当):

int funcaoh(node *estados, int n, int goal[], int pos) { … }

int funcaoh(node estados[], int n, int goal[], int pos) { … }