Typedef的2d指针数组

时间:2016-03-04 19:17:35

标签: c++ arrays pointers typedef

我正在尝试为我的2d指针数组定义一个类型,这样我就可以减少代码中的混乱。我有三个指针,所以我认为它看起来很糟糕。 我设法使用typedef重构代码,但它更像是试验和错误。我想知道这实际意味着什么:

typedef SomeClass* (&grid8x8)[8][8];

为什么这个函数返回ok值:

grid8x8 SomeOtherClass::getGrid()
{
    return grid;
}

在这种情况下,typedef的语法令我感到困惑。

3 个答案:

答案 0 :(得分:2)

typedef表示:grid8x8是对指向SomeClass的8x8指针数组的引用。

SomeOtherClass::getGrid函数是,我想象一下,将引用返回给成员变量SomeOtherClass::grid

我会这样做:

typedef SomeClass* (grid8x8)[8][8];


const grid8x8& SomeOtherClass::getGrid()
{
    return grid;
}

这样,您可以grid8x8grid8x8引用。更多才多艺,你不太可能忘记你有时候不应该使用那个参考。

答案 1 :(得分:1)

这是一个C ++ 11答案(毕竟问题标记为C ++)

您可以使用std::array来存储网格而不是C数组。根据您对模板的偏好,语法有点简单。

#include <array>
typedef std::array<std::array<SomeClass*, 8>, 8> grid8x8;

答案 2 :(得分:0)

它是指针((&))到整数([8][8])的8 x 8数组(*)的引用(int)。从右到左开始在最里面的括号内解析,然后再向右解析,最后再向左解析。相反,对指向8乘8的整数数组的指针的引用如下所示:

typedef int (*& RefToPtrToGrid)[2][2];

就个人而言,我发现c ++ 11风格更具可读性:

using RefTo8x8GridofPtr = int* (&) [8][8];

//or even better with std::array 
using Grid8x8 = std::array<std::array<int*,8>,8>&;

//or, more flexible:
template<size_t M,size_t N>
using Grid = std::array<std::array<int*,N>,M>&; //usage: Grid<8,8> myGrid;

另外,正如@Will Briggs所说,你可能不想制作类型的参考部分:

using Grid8x8 = int* [8][8];
//... and so on