C ++通过访问器函数返回私有二维数组

Posted

技术标签:

【中文标题】C ++通过访问器函数返回私有二维数组【英文标题】:C++ return private 2D array by accessor function 【发布时间】:2018-11-21 10:14:08 【问题描述】:

我有一个 C++ 类,它有一个函数,该函数从同一类的另一个变量中获取一个二维数组,以便该数组的这个特定实例可以访问另一个变量。有问题的变量是一个二维数组。给定下面的代码,您将如何实现访问器函数来获取私有二维数组变量。我的意图是让访问器返回 2d 数组,但我不知道要使用哪种返回类型。 int[][]、int**、int* 和 int 不起作用。

class MyClass
  public:
    // gets private x variable from another MyClass variable
    void proccessVar(const MyClass& aVar)
      // get and process the 2D array by calling getX()
      // int temp[10][10];
      // temp = aVar.getX();
      // proccess temp 2D array
    

    // Return 2D array x
    int** getX()
      return x;
    

  private:
    int x[10][10] = 0,0; // initialized value

【问题讨论】:

有什么理由不使用 std::array? 为什么int** 不起作用? Return a 2d array from a function的可能重复 @Korni 返回 x 我收到错误:无法将'int ()[10]' 转换为'int*' 作为回报。 @Korni 因为x 在衰减为指针时不是“指向 int 指针的指针”类型,而是“指向 10 个 int 数组的指针”。 int**int (*)[10] 不同。如果int **a; a[1][2] 编译器执行*( *(a + 1) + 2) 如果int (*a)[10]; a[1][2] 然后编译器执行*( a + 1 * 10 + 2 ) 【参考方案1】:
int x[10][10]

x 是 10 个 10 个整数的二维数组。

让我们衰减到一个指针:

int (*y)[10] = x;

y 是一个指向 10 个整数数组的指针。

您应该返回一个指向 10 个整数数组的指针:

int (*getX())[10] 
  return x;

或者重新考虑你的方法和使用 std::array。

【讨论】:

OP 也可以返回int(&)[10][10](或等效的decltype(auto))并保留大小信息。【参考方案2】:

现有的答案(返回一个指向一维数组的指针)有效,但下面的答案可能不那么令人困惑。

这个想法是返回对二维数组的引用。语法是:

class MyClass

    ...
    int (&getX())[10][10]
    
        return x;
    
;

或者,使用typedef

using myarray = int[10][10];
class MyClass

    ...
    myarray& getX()
    
        return x;
    
;

所有这些变通方法都是因为 C++ 无法从函数/方法返回数组。

【讨论】:

以上是关于C ++通过访问器函数返回私有二维数组的主要内容,如果未能解决你的问题,请参考以下文章

c语言中如何通过二级指针来操作二维数组

C语言函数传递二维数组

C-二维数组作为函数参数, 字符数组

C语言中如何定义一个二维数组,数组长度由输入值确定?

C语言指针学习总结

如何访问函数返回数组的元素?