Передать конкретную структуру для функции в C - PullRequest
0 голосов
/ 18 февраля 2019

Я писал программу на C для рисования символов на дисплее, используя PIC.

У меня есть несколько структур, содержащих символы и метаданные для разных шрифтов, и я пытаюсь выяснить, как передать их в функцию, которая рисует символ в буфере отображения.Код, который у меня есть, не будет компилироваться.

Пока у меня есть структуры, которые следуют этому формату в заголовочном файле:

struct Arial
{
    char symbol[1000] = {...};
    int info[32][3] = {...};
};

struct Courier
{
    char symbol[1000] = {...};
    int info[32][3] = {...};
};

struct Calibri
{
    char symbol[1000] = {...};
    int info[32][3] = {...};
};

В идеале, в остальной части моего кода, который я хотел бы передатьссылка на одну из структур в аргументах функции отображения, чтобы она знала, какой шрифт использовать.Я не могу понять, как это сделать, и я запутался.

Например, если я хотел использовать шрифт Arial для печати 10-го символа в структуре Arial:

void display_function(struct *font_name, int letter)
{
    int letter_start = font_name->info[letter][0];
    char letter_data = font_name->symbol[letter_start];

    // Draws to buffer here
}

void main()
{
    display_function(&Arial, 10);
}

Любая помощь на пути вперед будет высоко ценится.Я пытался найти другие подобные вопросы, но не могу найти тот, который мне удалось решить.

1 Ответ

0 голосов
/ 18 февраля 2019
Определение

A struct само по себе не создает переменную.Он определяет только тип и его члены.Из-за этого вы не можете указать инициализаторы в определении структуры.

Вам необходимо создать переменные этого типа.Затем вы можете их инициализировать.В этом случае вам нужен только один тип и три переменные этого типа.

struct font
{
    char symbol[1000];
    int info[32][3];
};

struct font Arial = { 
    "abcdefg...",
    {
        { 1, 2, 3 },
        { 4, 5, 6 },
        ...
    }
};

struct font Courier = { 
    "qwerty...",
    {
        { 9, 8, 7 },
        { 2, 3, 4 },
        ...
    }
};


void display_function(struct font *font_name, int letter)
{
    int letter_start = font_name->info[letter][0];
    char letter_data = font_name->symbol[letter_start];

    // Draws to buffer here
}

void main()
{
    display_function(&Arial, 10);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...