【问题标题】:Assign const 1D array from const 2D array row inside a header file c++从头文件c ++中的const 2D数组行分配const 1D数组
【发布时间】:2016-07-07 00:21:55
【问题描述】:

我已经在几个地方搜索过这个问题的解决方案,但都没有找到。本质上,我要做的是从 const 2d 数组的一行中分配一个 const 1D 数组,并专门在头文件中执行。

说我有

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

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

const int *Arr2 = Arr1[1];

const int *Arr2 = Arr1[0];

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

【问题讨论】:

    标签: c++ arrays initialization constants


    【解决方案1】:

    多重定义错误与你的分配没有任何关系。

    只需在标题中说明

     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
    

    【讨论】:

      【解决方案2】:

      您的代码:

      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];
      

      【讨论】:

        猜你喜欢
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 2014-07-17
        • 2022-01-07
        • 2013-08-28
        • 1970-01-01
        • 2019-09-27
        相关资源
        最近更新 更多