C 在结构初始化中初始化结构?

C 在结构初始化中初始化结构?,c,struct,C,Struct,这听起来可能有点愚蠢,但我必须知道,因为我正在用C写一个宾果游戏板 #include <stdio.h> typedef struct { int a; int b; int c; int d; int e; } row; typedef struct { row one; row two; row three; row four; row five; } bingo_board; void i

这听起来可能有点愚蠢,但我必须知道,因为我正在用C写一个宾果游戏板

#include <stdio.h>
typedef struct {
    int a;
    int b;
    int c;
    int d;
    int e;
} row;

typedef struct {
    row one;
    row two;
    row three;
    row four;
    row five;   
} bingo_board;

void initialize_columns()
{
    bingo_board board = {
    .one = {1, 2, 3, 4, 5},
    .two = {6, 7, 8, 9, 10},
    .three = {11, 12, 13, 14, 15},
    .four = {16, 17, 18, 19, 20},
    .five = {21, 22, 23, 24, 25}
    };
}
#包括
类型定义结构{
INTA;
int b;
INTC;
int d;
INTE;
}行;
类型定义结构{
第一排;
第二排;
第三排;
第四排;
第五排;
}宾果游戏局;
void初始化_列()
{
宾果棋盘={
.1={1,2,3,4,5},
.two={6,7,8,9,10},
.three={11,12,13,14,15},
.four={16,17,18,19,20},
.five={21,22,23,24,25}
};
}

这可能吗?

因为结构是c语言中的一级公民,赋值定义得很好,这让您

static bingo_board initial_board = {
    {1, 2, 3, 4, 5},
    {6, 7, 8, 9, 10},
    {11, 12, 13, 14, 15},
    {16, 17, 18, 19, 20},
    {21, 22, 23, 24, 25}
};


void init_board(bingo_board *b)
{
    *b = initial_board;
}

这似乎是你想要的。如果您确实在函数中声明了板,我建议您将其声明为静态,因为您不需要修改它,所以持久的更改是可以的,这样函数就不必在每次调用时都增加那么多堆栈。

只要

void initialize_columns()
{
    bingo_board board = {
      {1, 2, 3, 4, 5},
      {6, 7, 8, 9, 10},
      {11, 12, 13, 14, 15},
      {16, 17, 18, 19, 20},
      {21, 22, 23, 24, 25}
    };
}
甚至

void initialize_columns()
{
    bingo_board board = {
      1, 2, 3, 4, 5,
      6, 7, 8, 9, 10,
      11, 12, 13, 14, 15,
      16, 17, 18, 19, 20,
      21, 22, 23, 24, 25
    };
}

无需“标记”每一行。但是,标记语法在C99中可用,并且您的示例中的语法对于C99已经是正确的。

typedef struct{int cells[5][5];}bingo_board
是一种更易于循环的数据结构。对C来说是一种全新的数据结构。我认为这是一种数组,但您认为可以更明确一点吗?谢谢。这是一个二维整数数组(五个元素乘五个元素)。名为
x
bingo_板
可作为x.cells[行][列]访问。这比必须为每行或每列编写单独的案例更容易在循环中处理。在您的实现中,您必须为
x.one.a
x.four.a
编写单独的代码(您必须至少编写十个案例,每行和每列一个案例)。