C 向结构数组添加元素
我有一个struct类型的数组:C 向结构数组添加元素,c,arrays,multidimensional-array,struct,C,Arrays,Multidimensional Array,Struct,我有一个struct类型的数组: struct GENERATIONS { char generation[MAX_ROWS][MAX_COLS]; int hasCycle; }; typedef struct GENERATIONS Generation; 我声明一个生成变量如下: Generation generations[MAX_GENERATIONS]; 并尝试向代数组中添加一个代:numGenerations设置为0,然后通过循环递增 Generation *currentG
struct GENERATIONS
{
char generation[MAX_ROWS][MAX_COLS];
int hasCycle;
};
typedef struct GENERATIONS Generation;
我声明一个生成
变量如下:
Generation generations[MAX_GENERATIONS];
并尝试向代数组中添加一个代:numGenerations设置为0,然后通过循环递增
Generation *currentGeneration = NULL;
currentGeneration = (Generation *) malloc(sizeof(Generation));
然而,每次从类型“struct Generation*”分配给类型“Generation”时,我都会收到不兼容类型的错误。我理解这与我不理解但需要的指针有关
为什么我将数组声明为:
copyGeneration(currentGeneration);
generations[numGenerations] = currentGeneration;
一切都突然发生了 错误就是告诉你到底出了什么问题。变量
currentGeneration
的类型为“指向生成的指针”,变量generations
的类型为“生成数组”。不能将Generation指针分配给Generation数组的索引,只能分配Generation
当您将数组声明为
Generation*generations[MAX_generations]
时,一切都正常,因为您正在将一个指向Generation的指针分配给指向Generation的指针数组的索引。错误正是在告诉您出了什么问题。变量currentGeneration
的类型为“指向生成的指针”,变量generations
的类型为“生成数组”。不能将Generation指针分配给Generation数组的索引,只能分配Generation
当您将数组声明为
Generation*generations[MAX_generations]
时,一切都正常,因为您正在将一个指向Generation的指针分配给指向Generation的指针数组的索引。每个currentGeneration
都是指向Generation
的指针。然而,当你声明一个数组时,它期望每个索引都是一个代,而不是一个指向一代的指针。但是,当您将数组声明为Generation*generations[MAX_generations]
时,它希望每个索引都是指向Generation
的指针,这就是您分配给每个索引的内容。每个currentGeneration
都是指向一代的指针。然而,当你声明一个数组时,它期望每个索引都是一个代,而不是一个指向一代的指针。但是,当您将数组声明为Generation*generations[MAX_generations]
时,它希望每个索引都是指向Generation
的指针,这就是您分配给每个索引的内容。当前Generation
是Generation*
,而不是Generation
您需要一个Generation*
数组来保存它,而不是Generation
currentGeneration
数组是Generation*
,而不是Generation
您需要一个Generation*
数组来保存它,而不是Generation
数组要解决此问题,您可以用不同的方式继续。你能做的就是这样
Generation *generations[MAX_GENERATIONS];
\define MAX\u GENERATIONS 1024//您还可以获取一些其他值
#包括
#包括
静态整数计数=0
世代**推送(世代**世代,世代obj){
计数++;
如果(计数==最大生成数){
printf(“达到最大限制”);
世世代代,;
如果(计数=1)
世代=(世代**)malloc(sizeof(世代*)*计数);
其他的
世代=(世代**)realloc(世代,大小f(世代*)*计数);
代数[count-1]=(代数*)malloc(代数);
世代[计数-1]=obj;
世世代代,;
}
int main(){
世代**世代=空;
一代一代;
//将元素扫描到currentGeneration中
generations=push(generations,currentGeneration);//您可以在循环中使用它
}
要解决此问题,您可以用另一种方式继续。您可以做的是
Generation *generations[MAX_GENERATIONS];
\define MAX\u GENERATIONS 1024//您还可以获取一些其他值
#包括
#包括
静态整数计数=0
世代**推送(世代**世代,世代obj){
计数++;
如果(计数==最大生成数){
printf(“达到最大限制”);
世世代代,;
如果(计数=1)
世代=(世代**)malloc(sizeof(世代*)*计数);
其他的
世代=(世代**)realloc(世代,大小f(世代*)*计数);
代数[count-1]=(代数*)malloc(代数);
世代[计数-1]=obj;
世世代代,;
}
int main(){
世代**世代=空;
一代一代;
//将元素扫描到currentGeneration中
generations=push(generations,currentGeneration);//您可以在循环中使用它
}
尽管这看起来不错,但它似乎有点先进,我的教授可能知道它来自我以外的其他来源。我会说谢谢,我以后会尝试!好的,没问题。但目标是你理解这里的逻辑。如果可能的话,通过投票来帮助我提高声誉。尽管这看起来不错,但它似乎有点先进d我的教授可能知道它来自其他来源而不是我。我会说谢谢,我将来会尝试!好的,没问题。但目标是你理解这里的逻辑。如果可能的话,通过投票帮助我提高声誉。这是有道理的,当我测试从世代数组中获取元素时,我会创建一个新的ge生成(如上所示)和dog=generations[0]
。然后我可以使用g访问所有“对象”数据不使用&
去引用它,这是为什么?你是用->
访问的吗?这就是你访问结构指针上数据的方式。例如g->hasCycle
。是的,这正是我做的。这很有意义,当我测试从generations数组获取元素时,我会创建一个新的一代(如上所示)并且dog=generations[0]
。然后,我可以使用g访问所有“对象”数据,而不必使用t