C++中的2D整数数组

3

我希望快速地初始化一个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}};

但这告诉我'sides'存在错误,并且期望有一个分号。有没有一种快速初始化数组的方法?

谢谢!

7个回答

8

您将方括号放在了错误的位置。尝试这样做:

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], ...;

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

我以为我已经尝试过了。我想可能同时还有其他问题。谢谢! - Casey Kuball

4

int array[n][m] 的行为与 int array[n * m] 相同。

事实上,对于所有的 i, jarray[i][j] = array[m * i + j]

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

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


哇,真的吗?这使得将二维数组传递给函数变得更加容易了100倍! - redux

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++不行。


1

int sides[6][4] = ... 可以解决问题。这听起来你可能是从Java(或其他语言)背景过来的,所以我建议阅读一本C++书籍The Definitive C++ Book Guide and List以获取更多细节。


0

是的,所期望的sides类型是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
我会在函数外部创建一个数组,然后将其分配给你的本地变量。这很可能会调用memcpy或只是内联内存复制循环。
这是你能得到的最快的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接