首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使指针指向大小未知的多维数组?

如何使指针指向大小未知的多维数组?
EN

Stack Overflow用户
提问于 2009-02-09 20:06:54
回答 4查看 2.6K关注 0票数 1

如何使指针指向大小未知的多维数组?我试过了:

int **triangles;

triangles = new int[numTriangles][3];

但是我得到了这个错误:

cannot convert 'int (*)[3]' to 'int**' in assignment

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-09 20:11:06

代码语言:javascript
复制
triangles = new int[numTriangles*3];

然后以如下方式访问它:

代码语言:javascript
复制
triangles[numTriangles*triangleIndex+vertexIndex] = blah;

但这很乏味且容易出错,所以我建议使用boost.multi_array,或者使用您自己的代码(非常简单):

代码语言:javascript
复制
template<class T>
class Matrix {
public:
    Matrix(int _w, int _h) : data(_w*_h), w(_w), h(_h) {
    }

    T      & operator()(int x, int y)       { return data[y * w + x]; }
    T const& operator()(int x, int y) const { return data[y * w + x]; }

private:
    std::vector<T> data;
    int w, h;
};

// usage:
int main() {
    Matrix<float> triangles(numTriangles, 3);
    triangles(triangleIndex, vertexIndex) = blah;
}

另一方面,如果您实际上想要一个三角形数组,而不是二维数组,那么只需使用vector<Triangle>,其中Triangle是一个类:)

票数 4
EN

Stack Overflow用户

发布于 2009-02-09 20:15:50

错误消息说:)如果你新建一个数组,那么new返回一个指向它的第一个元素的指针。

多维数组只是数组数组的另一个名称。你得到了一个包含int[3]的数组,以及这些元素中的numTriangles元素。所以new要做的就是返回一个指向int[3]的指针。你赋予结果的变量必须具有该类型,这是一个指向3个整数数组的指针:

代码语言:javascript
复制
int (*triangles)[3];
triangles = new int[numTriangles][3];
triangles[triangleIndex][vertexIndex] = 42;

当然,typedefs在这方面也有帮助:

代码语言:javascript
复制
typedef int triangles_t[3];
triangles_t * triangles = new int[numTriangles][3];

由于C++优先规则,因此需要使用括号。它们告诉编译器,它创建的不是指向整数的三个指针的数组,而是指向三个整数的数组的指针。这类似于函数指针("void (*funptr)()")上更常见的用法...

票数 4
EN

Stack Overflow用户

发布于 2009-02-09 20:15:56

为此,您必须遍历一个维度并为另一个维度分配空间:

代码语言:javascript
复制
int** triangles;
triangles = new int*[NUMROWS];

for (int i = 0; i < NUMROWS; i++) {
   triangles[i] = new int[NUMCOLS];
}

但是在这样做的时候要小心,你将不得不做同样的事情来释放内存。

代码语言:javascript
复制
for (int i = 0; i < NUMROWS; i++) {
   delete [] triangles[i];
   triangles[i] = 0;
}
delete [] triangles;
triangles = 0;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/529697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档