【发布时间】:2015-09-02 23:03:34
【问题描述】:
我通过初始化列表将 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 个字节分隔。我很困惑。如何在不添加额外维度的情况下使其工作?
【问题讨论】:
-
“看似有效,但做不到”是什么意思?
-
什么?! 你是要求
[20][20][20]的人。如果你只想要[3][3][3],你可以改变你的结构。 -
"-x" 不能存储在字符中。你实际上想要
char* array [3][3][3];或只是'x'和char。 -
关于字符数组的常见问题。考虑使用 std::string,这样你就只有 2 维了。