如何初始化结构中的数组变量?

时间:2016-06-19 19:04:55

标签: c struct

我想初始化一些数组,这些数组是通过引用传递给函数的结构的成员。 感谢任何帮助。

typedef struct Snake_pos
{
    char field[10][10];
    int Y[10];
    int X[10];

}snake_pos;


int main()
{


      snake_pos pos1;
      pos_init(&pos1);

  return 0;
}



void pos_init(snake_pos *pos1)
{
    pos1->X={};
    pos1->Y={};
    pos1->field={};

}

3 个答案:

答案 0 :(得分:1)

  

您可以通过a访问数组内的任何数组元素   结构指针这样:

     
      
  • 代表 1 D 数组:   structure_pointer->array_valiable[index1]
  •   
  • 代表 2 D 数组:   structure_pointer->array_valiable[index1][index2]
  •   

现在,您可以使用X以这种方式初始化结构Y的数组fieldsnake_posscanf()的每个成员:

#include <stdio.h>

typedef struct Snake_pos
{
    char field[10][10];
    int Y[10];
    int X[10];

}snake_pos;

void pos_init(snake_pos *pos1)
{
    int i,j;

    //initializing each member

    //of array X
    for(i=0;i<10;i++)
        scanf("%d",&pos1->X[i]);

    //of array Y
    for(i=0;i<10;i++)
        scanf("%d",&pos1->Y[i]);

    //of the two dimensional array field
    for(i=0;i<10;i++)
        for(j=0;j<10;j++)
            scanf(" %c",&pos1->field[i][j]); 
    //notice the space before %c is to consume white spaces returning from before scanf's
}


int main()
{


      snake_pos pos1;
      pos_init(&pos1);

  return 0;
}
  

注意:如果要将所有成员初始化为单个固定值,   然后你可以代替在for循环中使用scanf(),分配值   这样:

  for(i=0;i<10;i++) //initializes all members with a value of 0
      pos1->X[i]=0;

答案 1 :(得分:1)

在定义变量时,您只能使用语法= {}。因此,要将每个成员归零,您可以将其定义为

snake_pos pos1 = { 0 };

或者如果传递给函数,就像这样

void pos_init(snake_pos *pos1)
{
    memset(pos1, 0, sizeof *pos1);
}

答案 2 :(得分:0)

如果你想用零来初始化,为什么不设置结构?

void pos_init(snake_pos *pos1)
{
    memset(pos1, 0, sizeof(snake_pos));
}