为什么在 C++ 3d 数组列表分配中需要额外的括号?
Why is extra bracket required in C++ 3d array list assignment?
我正在通过初始化列表将 3D 数组分配给结构,以利用成员复制。我有兴趣做一些描述的事情 in this post about array copying
这似乎可行,但如果不添加一组额外的括号就无法完成:
struct Options
{
char array [20][20][20];
};
int main(void)
{
Options K = {{ { "-x", "-o" }, { "-y", "-p", "-q" }, {"-r", "-s"} }};
};
最外层的括号用于封装赋值。下一对是我无法解释的额外一对。要分配的 3 个维度是:
- x = 括号内的字符串组数
- y = 每组中的字符串数
- z = 每个字符串中的字符数
这通常不会让我担心,因为所有内容都会被复制。然而,在赋值之后,内存中应该连续的最内层值被一个额外维度的倍数隔开。例如,不是“-x”和“-o”以 20 字节分隔,而是实际以 20 * 20 字节分隔。我很困惑。如何在不添加额外维度的情况下让它工作?
直接在您的代码中回答您的问题:
Options K = { // struct
{ // array
{ // array[0]
"-x", // array[0][0] with 3 chars, as string literal
{ // array[0][1] with 3 chars, transformed in braced form by me
'-', // array[0][1][0]
'o', // array[0][1][1]
'[=10=]' // array[0][1][2]
}
},
{ // array[1]
"-y", "-p", "-q"
},
{ // array[2]
"-r", "-s"
}
}
};
如果你输出这个数组,你自然会得到类似的东西(用点替换不可打印的'\0':
- x . . . . . . . . . . . . . . . . . . // A first 2D array contained in array[0]
- o . . . . . . . . . . . . . . . . . . // note that each line is exactly 20 chars long
. . . . . . . . . . . . . . . . . . . .
(followed by 17 similar empty lines)
- y . . . . . . . . . . . . . . . . . . // A second 2D array contained in array[1]
- p . . . . . . . . . . . . . . . . . .
- q . . . . . . . . . . . . . . . . . .
(etc)
我正在通过初始化列表将 3D 数组分配给结构,以利用成员复制。我有兴趣做一些描述的事情 in this post about array copying
这似乎可行,但如果不添加一组额外的括号就无法完成:
struct Options
{
char array [20][20][20];
};
int main(void)
{
Options K = {{ { "-x", "-o" }, { "-y", "-p", "-q" }, {"-r", "-s"} }};
};
最外层的括号用于封装赋值。下一对是我无法解释的额外一对。要分配的 3 个维度是:
- x = 括号内的字符串组数
- y = 每组中的字符串数
- z = 每个字符串中的字符数
这通常不会让我担心,因为所有内容都会被复制。然而,在赋值之后,内存中应该连续的最内层值被一个额外维度的倍数隔开。例如,不是“-x”和“-o”以 20 字节分隔,而是实际以 20 * 20 字节分隔。我很困惑。如何在不添加额外维度的情况下让它工作?
直接在您的代码中回答您的问题:
Options K = { // struct
{ // array
{ // array[0]
"-x", // array[0][0] with 3 chars, as string literal
{ // array[0][1] with 3 chars, transformed in braced form by me
'-', // array[0][1][0]
'o', // array[0][1][1]
'[=10=]' // array[0][1][2]
}
},
{ // array[1]
"-y", "-p", "-q"
},
{ // array[2]
"-r", "-s"
}
}
};
如果你输出这个数组,你自然会得到类似的东西(用点替换不可打印的'\0':
- x . . . . . . . . . . . . . . . . . . // A first 2D array contained in array[0]
- o . . . . . . . . . . . . . . . . . . // note that each line is exactly 20 chars long
. . . . . . . . . . . . . . . . . . . .
(followed by 17 similar empty lines)
- y . . . . . . . . . . . . . . . . . . // A second 2D array contained in array[1]
- p . . . . . . . . . . . . . . . . . .
- q . . . . . . . . . . . . . . . . . .
(etc)