C ++中的2D int数组

时间:2011-10-05 18:00:15

标签: c++ multidimensional-array initialization

所以我想非常快地初始化一个int 2d数组,但我无法弄清楚如何做到这一点。我做了一些搜索,没有人说如何初始化2D数组,除了:

int [SOME_CONSTANT][ANOTHER_CONSTANT] = {{0}};

基本上,我有8个顶点,我在一个数组中列出了一个立方体每个面的4个顶点。我试过这个:

int[6][4] sides = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}};

但是这告诉我'侧面'有错误,并且预计会出现分号。有没有办法像这样快速初始化数组?

谢谢!

7 个答案:

答案 0 :(得分:7)

我想你想说

int sides[6][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}};

答案 1 :(得分:7)

你有[] []错误的一面。试试这个:

int sides[6][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}};

请记住,你真正拥有的是:

int **sides

(指向int的指针)。它的侧面有尺寸,而不是int。因此,您也可以这样做:

int x, y[2], z[3][4], ...;

答案 2 :(得分:4)

int array[n][m]的行为就像int array[n * m]

事实上,array[i][j] = array[m * i + j]适用于所有i, j

所以int array[2][3] = {1, 2, 3, 4, 5, 6};是一个有效的声明,例如,

array[1][1] = array[3 * 1 + 1] = array[4] = 5

答案 3 :(得分:2)

int sides[6][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {0, 4, 7, 3}, {7, 6, 2, 3}, {5, 1, 2, 6}, {0, 1, 5, 4}}; 

我不是常规的c ++程序员,但我看起来int sides[6][4]似乎在int[6][4] sides失败时编译。像C#这样的语言允许你在任何一方都有[][],但显然c ++没有。

答案 4 :(得分:1)

int sides[6][4] = ...应该做到这一点。这听起来像是你可能来自Java(或其他语言)背景,所以我推荐一本C ++书籍The Definitive C++ Book Guide and List以获取更多细节。

答案 5 :(得分:0)

是的,双方的预期类型是int[6][4],但C ++有时会混淆语法。声明所述数组的方法是:

int sides[6][4] = {/*stuff*/};

你也会遇到函数指针,但更糟糕的是:

int (*myfuncptr)(int); //creates a function pointer called myfuncptr

使用函数指针,你可以这样做:

typedef int (*func_ptr_type)(int);
func_ptr_type myfuncptr;

不幸的是,数组没有相应的魔术技巧。

答案 6 :(得分:-1)

我会在函数之外创建一个数组,然后将它分配给你的本地。这很可能会调用memcpy或只是内联内存复制循环

这是你能获得的最快