【问题标题】:How can I get the size of the array in an 3D matrix?如何获得 3D 矩阵中数组的大小?
【发布时间】:2019-07-26 19:19:20
【问题描述】:

考虑以下 3D 矩阵

char ShapesArray[2] = { 
  (char[4][4]){
    { 0, 1, 0, 0 }, //I
    { 0, 1, 0, 0 },
    { 0, 1, 0, 0 },
    { 0, 1, 0, 0 }
  }, 
  (char[3][3]){
    { 0, 1, 0 },    //J
    { 0, 1, 0 },
    { 1, 1, 0 }
  }
};

通过使用

int i = sizeof(ShapesArray[0]));

我希望结果为 16。
但是这种情况下的结果是:1

我在这里错过了什么?

【问题讨论】:

  • char ShapesArray[2] 正在定义一个由两个 char 元素组成的一维数组。
  • 你的编译器应该抛出一些关于多余初始化器的警告
  • MSVC 生成 两个 'initializing' 警告:'char' 在间接级别上不同于 ...一个 错误 COFF 格式不能用地址的 1 个字节静态初始化 '_ShapesArray'。 但是数组 char ShapesArray[2] 应该有两个 char 元素所以 sizeof(ShapesArray[0])(一个关闭括号)是1,所以这部分是正确的。
  • 我认为这里不能使用静态的sizeof。我会用size_t size_x, size_y;定义一个struct
  • 尝试编译器选项-Wall

标签: c


【解决方案1】:

char ShapesArray[2] 是一个包含两个 chars 的数组。因此第一个元素的大小是 1。打开compiler warnings

<source>: In function 'main':

<source>:4:2: error: initialization of 'char' from 'char (*)[4]' makes integer from pointer without a cast [-Werror=int-conversion]

    4 |  (char[4][4]) {

      |  ^

<source>:4:2: note: (near initialization for 'ShapesArray[0]')

<source>:10:2: error: initialization of 'char' from 'char (*)[3]' makes integer from pointer without a cast [-Werror=int-conversion]

   10 |  (char[3][3]) {

      |  ^

<source>:10:2: note: (near initialization for 'ShapesArray[1]')

cc1: all warnings being treated as errors

Compiler returned: 1

编译器的意思是你正在用char (*)[4]char (*)[3] 初始化chars,这是错误的。它甚至不能用 C++ 编译器编译。

【讨论】:

  • 实际上它与arduino有关。 Sketch 使用 1972 字节(6%)的程序存储空间。最大值为 30720 字节....不过会尝试。谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2021-02-20
相关资源
最近更新 更多