从头文件 c++ 内的常量二维数组行分配常量 1D 数组



我已经在几个地方搜索了这个问题的解决方案,但结果很短。从本质上讲,我要做的是从常量 2d 数组的一行中分配一个 const 1D 数组,并专门在头文件中执行此操作。

说我有

const int Arr1[2][3] = {{1,2,3},{4,5,6}};

我想从这个数组初始化一个数组(在头文件中)。我知道通常我可以做到:

const int *Arr2 = Arr1[1];

const int *Arr2 = Arr1[0];

但是在头文件中这样做会产生多个定义错误。所以我的问题是是否有一种很好的方法来做到这一点。

多重定义错误与您的作业无关。

只需在标题中说

 extern const int *Arr2;

并在单独的翻译单元中初始化它:

 const int Arr1[2][3] = {{1,2,3},{4,5,6}};
 const int *Arr2 = Arr1[1];

也许有选择地从预处理器指令中:

 const int Arr1[2][3] = {{1,2,3},{4,5,6}};
 #ifdef ZERO_PATH
 const int *Arr2 = Arr1[0];
                     // ^ ZERO_PATH
 #else
 const int *Arr2 = Arr1[1];
 #endif

您的代码:

const int *Arr2 = Arr1[1];

初始化指针,而不是数组。 数组和指针是不同的。从您的帖子中不清楚您是否满足于使用指针,但如果是这样,那么您要么需要按照 πάντα ῥεῖ 的答案进行设置;或者给出Arr2内部链接:

const int *const Arr2 = Arr1[1];    // if you do not plan to change Arr2
static const int *Arr2 = Arr1[1];   // if you do

要实际使用数组,您可以编写:

const int Arr2[3] = { Arr1[1][0], Arr1[1][1], Arr1[1][2] };

无法将整个 C 样式数组用作相同类型另一个数组的初始值设定项。但是如果你使用C++式数组,你可以这样做:

const array<array<int, 3>, 2> Arr1 = {{ {1,2,3},{4,5,6} }};
const array<int, 3> Arr2 = Arr1[0];

最新更新