Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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_Struct - Fatal编程技术网

C(不是+;+;)结构动态初始化中结构数组的结构

C(不是+;+;)结构动态初始化中结构数组的结构,c,arrays,struct,C,Arrays,Struct,我在初始化数组中结构的(动态)部分时遇到了一些小问题。这就是我目前所拥有的,我正在使用一个子例程来创建结构 t_grille_animaux creer_grille(int dim_ligne, int dim_col) { t_grille_animaux grille; grille.la_grille = (t_case_animal **) malloc(sizeof(t_case_animal)*dim_ligne*dim_col); grille.di

我在初始化数组中结构的(动态)部分时遇到了一些小问题。这就是我目前所拥有的,我正在使用一个子例程来创建结构

t_grille_animaux creer_grille(int dim_ligne, int dim_col) 
{
    t_grille_animaux grille;

    grille.la_grille = (t_case_animal **) malloc(sizeof(t_case_animal)*dim_ligne*dim_col);

    grille.dim_colonne = dim_col;

    grille.dim_ligne = dim_ligne;

    grille.nb_predateurs = NULL;

    grille.nb_proies = NULL;

    return grille;

}
这是我的结构:

typedef struct
{
    t_case_animal ** la_grille; //2D array
    int dim_ligne;
    int dim_colonne;
    int nb_proies;
    int nb_predateurs;
} t_grille_animaux;

typedef struct
{
    t_contenu etat;
    t_animal animal;
} t_case_animal;

typedef enum {VIDE, PROIE, PREDATEUR} t_contenu;

typedef struct
{ 
    int age;           
    int jrs_gestation; 
    int energie;      
    int disponible;    
} t_animal;
(很抱歉用这种语言)


我现在得到的是数组中不是结构的所有东西都很好。但是数组中的所有内容都是未声明的。

这应该可以做到:

#define NUM_ROWS (10)
#define NUM_COLS (15)

grille.la_grille = malloc(NUM_ROWS * sizeof(*grille.la_grille));
for(int row = 0; row < NUM_ROWS; row++)
    grille.la_grille[row] = malloc(NUM_COLS * sizeof(**grille.la_grille));
#定义行数(10)
#定义数量(15)
格栅.lau格栅=malloc(行数*尺寸(*格栅.lau格栅));
对于(int row=0;row
函数
malloc()
不(必须)将分配的字节初始化为任何特定值。因此,在调用
malloc()
之后,应该显式初始化分配的数据

话虽如此,关于如何存储二维数组,您有两种选择。这取决于您希望如何访问数据。由于C没有真正的多维数组,您可以:

  • 声明一个大小为
    t\u case\u animal
    值的一维数组
  • 声明一个大小为
    dim\u ligne
    的行指针数组,每个指针指向另一个
    dim\u col
    值的一维数组
对于第一种情况,将您的
lau格栅声明更改为:

t_case_animal * la_grille;
并访问您的值,例如
lau grill[j*dim\u colonne+i]

对于第二种情况,请确保初始化子阵列:

grille.la_grille = (t_case_animal **) malloc(sizeof(t_case_animal*)*dim_ligne);
for (int i = 0; i < dim_ligne; i++) {
    grille.la_grille[i] = (t_case_animal *) malloc(sizeof(t_case_animal)*dim_col);
}
grill.la_grill=(t_case_animal**)malloc(sizeof(t_case_animal*)尺寸线);
对于(int i=0;i
在第二种情况下,您可以像
lau grill[j][i]
那样访问您的值,您可以使用
malloc()
为每一行分配内存。以下代码应该可以工作:

#include<stdlib.h>

typedef struct
{ 
    int age;           
    int jrs_gestation; 
    int energie;      
    int disponible;    
}t_animal;

typedef enum {VIDE, PROIE, PREDATEUR} t_contenu;

typedef struct
{
    t_contenu etat;
    t_animal animal;
} t_case_animal;

 typedef struct
{
    t_case_animal ** la_grille; //2D array
    int dim_ligne;
    int dim_colonne;
    int nb_proies;
    int nb_predateurs;
} t_grille_animaux;


t_grille_animaux creer_grille(int dim_ligne,int dim_col)
{

t_grille_animaux grille;


    grille.la_grille = (t_case_animal**) malloc(sizeof(t_case_animal*)*dim_ligne);

    for(int i=0; i<dim_ligne; i++) {
        grille.la_grille[i] = (t_case_animal*) malloc(sizeof(t_case_animal)*dim_col);
    }

grille.dim_colonne = dim_col;

grille.dim_ligne = dim_ligne;

grille.nb_predateurs = 0;

grille.nb_proies = 0;

return grille;

}

int main(int argc, char* argv[])
{
    t_grille_animaux test;
    test = creer_grille(3, 4);
}
#包括
类型定义结构
{ 
智力年龄;
int-jrs_;
国际能源;
int可争议;
}t_动物;
typedef enum{VIDE,PROIE,PREDATEUR}t_contenu;
类型定义结构
{
t_contenu etat;
动物;
}案例动物;
类型定义结构
{
t_case_animal**la_grill;//2D数组
内部调光;
内迪姆科隆;
国际核电站;
国际nb_先驱者;
}t_grillu_animaux;
t_格栅_animaux creer_格栅(内部调光、内部调光)
{
t_格栅_animaux格栅;
grill.la_grill=(t_case_animal**)malloc(sizeof(t_case_animal*))*尺寸;

对于(int i=0;仅标签就可以澄清语言。无需在标题中指定它(并浪费空间命名问题:))
la_Grill
是一个指向
t_case_animal
的指针数组。您将其分配为一个
t_case_animal
@user3084993不要担心出错。我已经使用指针多年了,但仍然一直出错!