C中的多维数组初始化

Multi-dimensional Array Initialization in C

我正在摆弄一个 Arduino,我几乎没有用 C 编程。 在查看一些示例代码时,我遇到了这个数组变量声明:

byte myArray[][6] = {"0"};

我知道这是在声明一个包含未指定行和 6 列的数组。 我不明白的是 {"0"}。 在执行类似代码时,这个变量将包含什么?

谢谢!

字符串文字 "0" 等同于复合文字 (char[]){ '0', '[=12=]' }。所以声明等同于:

byte myArray[][6] = { { '0', '[=10=]' } };

所以生成的数组将是一行,其中包含一个 ASCII 0(或适合任何目标字符集的 0),后跟 5 个 [=15=] 或 NUL 字节.

该表达式将初始化一个如下所示的数组:

               myArray[0][0]
                     ^
                     |   +----> myArray[0][1]
                     |   |
                   +---+----+---+---+---+---+
myArray[0] ----->  |'0'|'[=10=]'|   |   |   |   |
                   +---+----+---+---+---+---+

由于您没有指定第一个维度,并且您只初始化了 1 行,因此默认为 byte myArray[1][6]

如果您要初始化数组,例如:

byte myArray[][6] = {"0", "1"};

那么它将是:

               myArray[0][0]
                     ^
                     |    +----> myArray[0][1]
                     |    |
                   +---+----+---+---+---+---+
myArray[0] ----->  |'0'|'[=12=]'|   |   |   |   |
                   +---+----+---+---+---+---+
myArray[1] ----->  |'1'|'[=12=]'|   |   |   |   |
                   +---+----+---+---+---+---+                    
                     ^    |
                     |    |
           myArray[1][0]  |
                          +--->myArray[1][1]

在这种情况下,因为你初始化了2行,所以默认为byte myArray[2][6]