在struct初始化中初始化一个struct?

时间:2011-09-09 04:52:56

标签: 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 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}
    };
}

这可能吗?

2 个答案:

答案 0 :(得分:4)

可以简单地完成

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已经是正确的。

答案 1 :(得分:1)

因为结构是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;
}

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