c - 将特定结构传递给 C 中的函数

标签 c pointers structure

我一直在用 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 字体打印 Arial 结构中的第 10 个字符:

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);
}

任何有关前进道路上的帮助将不胜感激。我曾尝试寻找其他类似的问题,但找不到我能够解决的问题。

最佳答案

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);
}

关于c - 将特定结构传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54750292/

相关文章:

c - 如何在 Linux 中创建高分辨率定时器

const char* 指针运算警告

c - 访问结构变量双指针

c - 图 C 实现 - 深度优先搜索

c++ - sqlite3_open - 检查文件是否为 sqlite3 数据库时出现问题

c - 使用 gcc 在共享库中传播 "-g"

c# - 在 c# 和 c dll 之间使用通用颜色值

c - 指针 - 段错误(核心已转储)

c - 在 C 中重用地址空间?

java - 如果您想成为 Java/C++ 程序员,是否必须学习数据结构?