所以我想很快初始化一个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}};
但这告诉我,"侧面"有一个错误,它期待着一个半殖民地。有没有办法像这样快速初始化数组?
谢谢!
你把[][]放在了错误的一边。试试这个:
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], ...;
我想你是说
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 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
。
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++没有。
int sides[6][4] = ...
应该能做到这一点。听起来你可能来自Java(或其他语言(背景,所以我推荐一本C++书《最终C++图书指南和列表》来了解更多细节。
是的,预期的边类型是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;
不幸的是,数组没有相应的魔术。
我会在函数之外创建一个数组,并将其分配给本地。这很可能会调用memcpy或只是内联内存复制循环
这是你能得到的最快的