Можете ли вы создать массив внутри инициализации структуры? - PullRequest
0 голосов
/ 20 января 2019

Итак, у меня есть структура:

typedef struct Board {
    size_t size;
    char* board;
} Board;

Мне было интересно, можно ли было сделать что-то подобное во время инициализации структуры:

Board boardStruct = {
    solutionLength, 
    char emptyBoard[size]
};

К сожалению, когда я пытаюсь сделать это таким образом, я получаю ошибку компиляции: expected expression before 'char'

Есть идеи? Я пытаюсь избежать объявления массива вне инициализации структуры, но если это единственный вариант, я думаю, что это маршрут, по которому мне придется идти.

Ответы [ 2 ]

0 голосов
/ 20 января 2019

@ Бруно решение будет работать. Другая вещь, которую вы можете попробовать, - поместить массив в структуру Board. Например:

typedef struct Board {
    size_t size;
    char board[size];
} Board;

Upside: избегает malloc / free для каждой доски.
Недостаток: плата больше, поэтому копирование стоит дороже. Кроме того, вы должны знать, насколько велика доска до запуска вашей программы.

0 голосов
/ 20 января 2019

Вы можете сделать что-то подобное:

#include <stdlib.h>

typedef struct Board {
    size_t size;
    char* board;
} Board;

int main()
{
  const int solutionLength = 3; /* or #define solutionLength 3 */

  Board boardStruct = {
    solutionLength, 
    malloc(solutionLength)
  };

  return 0;
}

или ближе к вашему предложению:

#include <stdlib.h>

typedef struct Board {
    size_t size;
    char* board;
} Board;


int main()
{
  const int solutionLength = 3; /* or #define solutionLength 3 */
  char emptyBoard[solutionLength];

  Board boardStruct = {
    solutionLength, 
    emptyBoard
  };

  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...