C++中的2D int数组

2D int array in C++

本文关键字:数组 int 2D 中的 C++      更新时间:2023-10-16

所以我想很快初始化一个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或只是内联内存复制循环

这是你能得到的最快的