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 []分配了一个在编译时具有已知类型的元素数组,因此您只能将第一个(最外部)维度设置为运行时值 – 所有其他维度必须在编译时具有已知值.如果这不是你想要的,你将不得不分配一个指针数组,就像其他一些答案所说的那样. 但请注意,为避免进一步混淆,那些不是多维数组.它们是指针的一维数组,恰好指向其他一维数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |