C语言中的参差不齐数组

C语言中的参差不齐数组,c,arrays,multidimensional-array,ragged,C,Arrays,Multidimensional Array,Ragged,我得到了一个用C语言编写的微控制器项目。我是一个有造诣的程序员,但不是用这种语言编写的。我“认为”我的问题与C语法有关(我缺乏理解),而不是微控制器编译器,因此为了简洁起见,我将忽略编译器问题 我试图使用锯齿状/参差不齐的数组来存储字体信息,以便在LCD上显示快速调用。还有其他方法可以解决这个问题,但我有理由坚持这个概念 让我们假设在这个例子中,我的字体中只有三个字形(字符)。未知的是定义该标志符号的每一行的长度。示例: 字形{A}需要以下数据: {65,8,12,1,0,0x18,0x3C,0

我得到了一个用C语言编写的微控制器项目。我是一个有造诣的程序员,但不是用这种语言编写的。我“认为”我的问题与C语法有关(我缺乏理解),而不是微控制器编译器,因此为了简洁起见,我将忽略编译器问题

我试图使用锯齿状/参差不齐的数组来存储字体信息,以便在LCD上显示快速调用。还有其他方法可以解决这个问题,但我有理由坚持这个概念

让我们假设在这个例子中,我的字体中只有三个字形(字符)。未知的是定义该标志符号的每一行的长度。示例:

字形{A}需要以下数据: {65,8,12,1,0,0x18,0x3C,0x66,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xFF,0xFF}

字形{'}需要以下数据: {39,2,3,4,9,0xC0,0xC0,0xC0,0xC0}

字形{.}需要以下数据: {46,2,2,4,0,0xC0,0xC0}

记住这一点,这里是我的代码

//This is where I attempt to make my Jagged array.
 char X,Y, LeftOffSet, BaseOffSet;
 char * font[3]={{46,2,2,4,0,0xC0,0xC0},
                {39,2,3,4,9,0xC0,0xC0, 0xC0},
                {65,8,12,1,0,0x18, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF}};

//None of these assignments work properly.
 LeftOffSet=font[0][0];  // expected assignment = {46}
 LeftOffSet=font[1][4];  // expected assignment = {9}
 LeftOffSet=font[2][1];  // expected assignment = {8}
这个代码看起来有用吗?我似乎犯了一个很难捕捉的错误。作业未按预期进行。当编译器点击第一个时,它会重置项目

提前感谢您的帮助。

如果您真的需要一个不规则数组,那么为了使用这种内嵌语法构建它,您需要一个支持复合文本的现代C编译器

如果编译器不支持复合文本,那么您别无选择,只能将内部数组定义为单独的命名对象

char row0[] = {46,2,2,4,0,0xC0,0xC0},
     row1[] = {39,2,3,4,9,0xC0,0xC0, 0xC0},
     row2[] = {65,8,12,1,0,0x18, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF},
     *font[] = { row0, row1, row2 };
您的原始代码不是有效的C语言。如果它编译了,那只是由于某些编译器扩展,而这些扩展并不像您认为的那样


另外,与

相同的问题是,这就是您要寻找的:

    char X,Y, LeftOffSet, BaseOffSet;
    char font1[7] ={46,2,2,4,0,0xC0,0xC0}; 
    char font2[8] ={39,2,3,4,9,0xC0,0xC0, 0xC0}; 
    char font3[15] ={65,8,12,1,0,0x18, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF}; 

    char *fonts[] = {font1, font2, font3};

    main (int argc, char *argv[]) {
    //None of these assignments work properly.
     LeftOffSet = fonts[0][0];
    }
请注意,这是危险的,因为您不知道单个数组的长度。 更好的方法是将数组的大小作为数组的第一个元素,读取它以检查边界,然后对其进行索引。或者,您也可以有一个结构来定义它

struct font {
 short size;
 char pattern[MAX_FONT_SIZE];
}

你的问题是什么?这个代码看起来正确吗?我似乎在抛出错误,这不容易陷入陷阱。更详细地说,我似乎在抛出错误。你在哪里看到他们?您没有提供足够的代码来完全编译任何东西。Ryker snarky注释对任何人都没有帮助。如果你阅读整个问题并尽可能回答它,这会有所帮助。如果你不能,把它留给别人。你的评论似乎旨在提高你的分数,而不是提供真正的帮助。我不打算上传我的整个项目,希望你能找到需要帮助的代码。@cartondog-我很抱歉这样做了。我的字面意思是,这将有助于获得更多的信息。我还以为你问了个好问题呢。没什么不好的。很好,谢谢你简洁而翔实的回答。非常干净。我不知道这个技巧!
struct font {
 short size;
 char pattern[MAX_FONT_SIZE];
}