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];
一切突然有效吗?
答案 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)
currentGeneration
是Generation *
,而不是Generation
。
您需要一个Generation *
数组来保存它,而不是Generation
的数组。