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]
。
我正在摆弄一个 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]
。