Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 向结构数组添加元素_C_Arrays_Multidimensional Array_Struct - Fatal编程技术网

C 向结构数组添加元素

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类型的数组:

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生成(如上所示)和do
g=generations[0]
。然后我可以使用g访问所有“对象”数据不使用
&
去引用它,这是为什么?你是用
->
访问的吗?这就是你访问结构指针上数据的方式。例如
g->hasCycle
。是的,这正是我做的。这很有意义,当我测试从generations数组获取元素时,我会创建一个新的一代(如上所示)并且do
g=generations[0]
。然后,我可以使用g访问所有“对象”数据,而不必使用t