向Struct Array添加元素

时间:2015-06-17 02:15:55

标签: c arrays multidimensional-array struct

struct GENERATIONS
{
char generation[MAX_ROWS][MAX_COLS];
int hasCycle;
};

typedef struct GENERATIONS Generation;

我有一个类型为struct的数组:

Generation generations[MAX_GENERATIONS];

我声明了一个Generation变量:

Generation *currentGeneration = NULL;
currentGeneration = (Generation *) malloc(sizeof(Generation));

并尝试将一代生成添加到代数组中:numGenerations设置为0,然后通过循环递增。

copyGeneration(currentGeneration);
generations[numGenerations] = currentGeneration;

然而,每次从类型'struct Generation *分配类型'Generation'时,我都会得到错误不兼容的类型。我知道这与我不理解但需要的指针有关。

为什么当我将数组声明为:

Generation *generations[MAX_GENERATIONS];

一切突然有效吗?

4 个答案:

答案 0 :(得分:2)

每个currentGeneration都是指向Generation的指针。然而,当您声明一个数组Generation generations[MAX_GENERATIONS]时,它希望每个索引 Generation,而不是指向一个的指针。但是,当您将数组声明为Generation *generations[MAX_GENERATIONS]时,它希望每个索引都是指向Generation的指针,这就是您为每个索引分配的内容。

答案 1 :(得分:1)

错误告诉你究竟出了什么问题。变量currentGeneration的类型为“指向生成的指针”,而变量generations的类型为“生成数组”。您不能将Generation指针分配给Generation数组的索引 - 您只能分配Generation。

当您将数组声明为Generation *generations[MAX_GENERATIONS]时,一切正常,因为您将指向Generation的指针分配给指向Generation的指针数组的索引。

答案 2 :(得分:1)

要解决此问题,您可以采用其他方式继续。你能做的就是这个

#define MAX_GENERATIONS 1024 // you can take some other value too
#include <stdio.h>
#include <stdlib.h>
static int count = 0

Generation** push(Generation** generations, Generation obj){
 count++;
 if (count == MAX_GENERATIONS){
   printf("Maximum limit reached\n");
   return generations;

 if ( count == 1 )
   generations = (Generation**)malloc(sizeof(Generation*) * count);
 else
   generations = (Generation**)realloc(generations, sizeof(Generation*) * count);

 generations[count - 1] = (Generation*)malloc(sizeof(Generation));
 generations[count - 1] = obj;

 return generations;
}

int main(){
  Generation** generations = NULL;
  Generation currentGeneration;
  // Scan the the elements into currentGeneration
  generations = push(generations, currentGeneration); // You can use it in a loop
}

答案 3 :(得分:0)

currentGenerationGeneration *,而不是Generation

您需要一个Generation *数组来保存它,而不是Generation的数组。