Как ссылаться на 2-мерный массив в struct для использования функции

#c #embedded #system

#c #встроенный #система

Вопрос:

Я пытаюсь запрограммировать игровой клон, используя ЖК-экран платы разработки микроконтроллера. Я решил использовать плиточный подход, поскольку утилиты LCD позволяют мне размещать отдельные пиксели. У меня есть свои плитки, определенные как двумерные массивы в отдельном заголовочном файле. Каждая запись в массиве представляет цвет этого пикселя с этим индексом [y] [x] .

 #define TILE_SIZE 4 \ px

unsigned short TILE[TILE_SIZE][TILE_SIZE] = {
    { Green, Green, Green, Green },
    { Green, Green, Green, Green },
    { Green, Green, Green, Green },
    { Green, Green, Green, Green } 
};
 

В моем основном файле я определил структуру плитки следующим образом

 struct Tile {
    unsigned short width; // width of tile
    unsigned short height; // height of tile
    unsigned short pixels[][TILE_SIZE];
    unsigned short x; // x-coordinate to begin drawing
    unsigned short y; // y-coordinate to begin drawing
};
 

Я не совсем уверен, как сохранить данные в массиве ПЛИТОК в массив pixels[][] структуры sprite. Я считаю, что по ссылке было бы лучше избежать избыточного использования памяти, но я считаю, что вы не можете передавать 2d-массивы по ссылке. Структура плитки передается render_sprite функции позже в коде, который перебирает массив и отображает каждый пиксель. Я бы хотел, чтобы эта render_sprite функция была универсальной, поэтому я стараюсь избегать render_sprite(unsigned short pixels[][4])

Любая помощь будет оценена.

Комментарии:

1. Конечно, вы можете передавать 2d-массивы по адресу. На самом деле вы не можете передавать массивы по значению в C, если они не являются частью структуры, передаваемой по значению. Итак, я не уверен, в чем здесь проблема?

Ответ №1:

Вы можете просто передать указатель на свою Tile структуру, например render_sprite(Tile* tile) . Структура содержит всю необходимую информацию (ширину и высоту), чтобы полностью описать размер базового массива пикселей.