Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化数组的数组-故障 OK,我知道在C++中,我们假设二维数组可以这样初始化: int theArray[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15} };_C++_C_Arrays_Multidimensional Array_Clang - Fatal编程技术网

初始化数组的数组-故障 OK,我知道在C++中,我们假设二维数组可以这样初始化: int theArray[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15} };

初始化数组的数组-故障 OK,我知道在C++中,我们假设二维数组可以这样初始化: int theArray[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15} };,c++,c,arrays,multidimensional-array,clang,C++,C,Arrays,Multidimensional Array,Clang,现在,如果我想使用预先存在的数组作为数组的元素怎么办 例如 // A, B, C, D,... have already been declared as : // `const U64 A[] = { 1,2,3,4 };` etc... const U64 multiDimArray[12][64] = { A, B, C, D, E, F, G, H, I, J, K, L }; 这一个抛出了一个错误,尽管: cannot initialize an arra

现在,如果我想使用预先存在的数组作为数组的元素怎么办

例如

// A, B, C, D,... have already been declared as :
// `const U64 A[] = { 1,2,3,4 };` etc...

const U64 multiDimArray[12][64] = { 
     A, B, C, D, E, F,  
     G, H, I, J, K, L
};
这一个抛出了一个错误,尽管:

cannot initialize an array element of type 'const U64' 
(aka 'const unsigned long long') with an lvalue of type 'const U64 [64]'
我明白这一点,但希望你能明白我的意思


是否有一个变通办法,使我能够轻松地实现同样的目标?(欢迎任何建议-可能使用Boost?-的东西)

我可以理解为什么这很有用,但是,在C中,仅使用数组的变量名将返回内存中数组的地址。编译器不知道在编译时实际存储的是什么,所以这不起作用

作为替代方案,您可以使用memcpy并将元素复制到数组中(但它不会是
const
),或者您可以使用
#定义一个{1,2,3,4}
,然后可能执行以下操作:

#define A_val { 1, 2, 3, 4 }
#define B_val { 5, 6, 7, 8 }
const U64 multiDimArray[12][64] = {
    A_val,
    B_val,
    // and so on and so forth
}
const U64 A[4] = A_val; // if you need this
const U64 B[4] = B_val; // you can do it like this

如果使用C++11,则
数组
的初始值设定项列表是灵活的:

std::array< array<U64, 64>, 12> multiDimArray = {
     A, B, C, D, E, F,  
     G, H, I, J, K, L
};
您可以将其用作固定大小的数组,并执行相同的操作:

a[1][2]=2; a[0][1]=1; a[0][2]=3;

您可以利用这样一个事实,即二维数组实际上是一维指针数组。下面的初始化应该适合您

const U64 *multiDimArray[12] = { 
     A, B, C, D, E, F,  
     G, H, I, J, K, L
};

这听起来是一个非常有趣的想法。让我看看如何将其纳入我的通用代码方案中。;-)您可以将新的数组类用于固定大小的数组。
const U64 *multiDimArray[12] = { 
     A, B, C, D, E, F,  
     G, H, I, J, K, L
};