加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C 2D动态阵列

发布时间:2020-12-16 10:39:17 所属栏目:百科 来源:网络整理
导读:我试图动态地将2d数组分配给构造函数初始化中的指针. FooBar::FooBar() : _array( new int[10][10] ){ }int **_array; 但是这不起作用.我知道多维数组的分配有点不同.是否有人能够通过解释详细说明这一点? 提前致谢. 解决方法 这里的一些答案说二维数组是指
我试图动态地将2d数组分配给构造函数初始化中的指针.

FooBar::FooBar()
    : _array( new int[10][10] )
{ }
int **_array;

但是这不起作用.我知道多维数组的分配有点不同.是否有人能够通过解释详细说明这一点?

提前致谢.

解决方法

这里的一些答案说二维数组是指向其他数组的指针数组.那不是真的(存储指针的地方,如果你分配的只是数组的数据!?).相反,二维数组是其他数组的数组.因此,您必须更改成员的类型:

FooBar::FooBar()
    : _array( new int[10][10] )
{ }
int (*_array)[10];

这是因为new []返回一个指向所创建数组的第一个元素的指针.此元素是10个整数的数组,因此成员类型更改.如果语法吓跑了你,用temlate简化它(这个模板相当于boost :: identity).

template<typename T> struct identity { typedef T type; };

FooBar::FooBar()
    : _array( new int[10][10] )
{ }
identity<int[10]>::type *_array;

这有效地像就地typedef一样工作.当然,就像使用new []一样,它需要在析构函数中放置一个正确的delete [],并在对象被销毁时调用.

由于new []分配了一个在编译时具有已知类型的元素数组,因此您只能将第一个(最外部)维度设置为运行时值 – 所有其他维度必须在编译时具有已知值.如果这不是你想要的,你将不得不分配一个指针数组,就像其他一些答案所说的那样.

但请注意,为避免进一步混淆,那些不是多维数组.它们是指针的一维数组,恰好指向其他一维数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读