我正在通过初始化列表将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"和" -o"例如,它们被20个字节隔开,实际上它们相隔20 * 20个字节。我很困惑。如何在不增加额外维度的情况下使其工作?
答案 0 :(得分:0)
直接在您的代码中回答您的问题:
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]
'\0' // 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)