2011-10-05 156 views
0

所以我想快速初始化一个int 2d数组,但我无法弄清楚如何去做。我已经做了一些搜索和他们没有说如何初始化一个二维数组,除了要做到:C++中的2D int数组

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}}; 

但是,这告诉我,有一个错误与“边”,而且它预计分号。有没有办法像这样快速初始化一个数组?

谢谢!

回答

4

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

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 x, y[2], z[3][4], ...; 
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++没有。

6

我觉得你的意思是说

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}}; 
+0

我以为我试过这样做。我想我一定还有其他问题。谢谢! – Darthfett

-1

我会做一个阵列的功能之外,只是为它分配它到本地。这将很可能调用的memcpy或只是列直插式内存复制循环

这是最快的,你可以得到

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; 

不幸的是,阵列没有相应的魔术技巧。

1

int sides[6][4] = ...应该这样做。这听起来像你可能来自Java(或其他语言)的背景,所以我建议使用C++书籍The Definitive C++ Book Guide and List了解更多细节。

3

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

+0

哇,真的吗?这使得将2d数组传递给函数100倍更容易! – redux