所以我想非常快地初始化一个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}};
但是这告诉我'侧面'有错误,并且预计会出现分号。有没有办法像这样快速初始化数组?
谢谢!
答案 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或只是内联内存复制循环
这是你能获得的最快