Чтобы иметь динамические массивы, вам нужно указатели:
typedef struct Image
{
int amount;
char** paths; // pointer to pointer of chars
SDL_Texture** textures; // pointer to pointer of textures
} Image;
При создании объекта структуры, зная реальный размер («Сумма»), вы затем выделять память динамически:
struct Image img;
img.paths = calloc (amount, sizeof(char*));
img.textures = calloc (amount, sizeof(SDL_Texture*));
img.amount = amount;
Из Конечно, вам нужно проверить, что выделенные poitners не являются NULL.
Затем вы можете получить доступ к элементам, как вы бы сделали с вашей собственной структурой.
Примечание: массив переменной длины является дополнительной функцией стандарта C11. Не каждый компилятор поддерживает его. Но в любом случае, typedef
никогда не допускает массив переменной длины, потому что компилятор C должен знать во время компиляции размер всего struct
. Это возможно только в том случае, если размер массива является константой.
Вы не можете иметь размера массивов переменных, как это. –
Вам, по-видимому, нужны указатели-указатели и управление динамической памятью. – WhozCraig
@JonathonReinhart Почему я не могу этого сделать? Вы делаете это для петель? –