【问题标题】:How to set 1d array to 2d array element in C如何在C中将一维数组设置为二维数组元素
【发布时间】:2013-05-09 11:07:59
【问题描述】:

我需要这样的东西:

char font[128][8] = {{0}};

font[0][] = {0, 0b00000000, 0b11111100, 0b00010010, 0b00010010, 0b11111100, 0b00000000, 0};
font[1][] = {...}

但在 c99 中,我得到“'{' 标记之前的预期表达式”。请帮忙。

【问题讨论】:

  • 您不能分配给数组。要么在初始化期间使用初始化器列表,要么使用复合文字和memcpy(),或者在循环中一个一个地赋值。
  • 0b00000000 在 C 中有效吗?请帮忙..

标签: c arrays c99


【解决方案1】:

在声明数组时,您只能使用初始化列表 ({...}),这就是您收到错误的原因。你不能给数组赋值,font[0] 就是(char[])。

您有 3 个选项:


  • char font[128][8] = {
      {0, 0b00000000, 0b11111100, 0b00010010, 0b00010010, 0b11111100, 0b00000000, 0};
      {...}
     }
    
  • 将每个值分别分配给数组中的一个元素:font[0][0] = x, ..., font[127][7] = y(即使用循环)。

  • memcpy 一次阻止来自uint64_t (sizeof(font[0]) = 8) 或其他任何您可以整齐/高效地存储数据的位置。

可能还值得注意的是,二进制常量是 C 扩展,并且char 是有符号的,如果您正在处理无符号数据,您可能应该明确使用unsigned char。

【讨论】:

  • 等等,什么? char 签名了吗?从何时起?在我的 C 版本中,char 是否签名完全是由实现定义的决定。
  • @ElchononEdelson:哦,是的,你是对的,应该可以。
【解决方案2】:
char font[128][8] = {
    {0, 0b00000000, 0b11111100, 0b00010010, 0b00010010, 0b11111100, 0b00000000, 0},//font[0]
    /*{...}*///font[1]
};

【讨论】:

    【解决方案3】:

    试试看:

        char font[128][8] = {{0}};  
        char a[8] = {0, 0b00000000, 0b11111100, 0b00010010, 0b00010010, 0b11111100, 0b00000000, 0};
        //Take array a to store values 
    
        for(int i = 0;i<8;i++)
        font[0][i] =  a[i];
        //Assign value of a to font
    

    【讨论】:

      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 2012-03-08
      • 2019-01-15
      • 1970-01-01
      • 2021-11-23
      • 2021-03-11
      • 1970-01-01
      • 2013-06-29
      相关资源
      最近更新 更多