Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从一维阵列创建二维阵列_C++_Multidimensional Array - Fatal编程技术网

C++ 从一维阵列创建二维阵列

C++ 从一维阵列创建二维阵列,c++,multidimensional-array,C++,Multidimensional Array,如果我有几个相同数据类型的数组,那么将它们全部复制到二维数组中的最佳方法是什么。比如说 int array1[] = {1,2,3,4,5,6,7,8,9,10}; int array2[] = {9,8,7,6,5,4,3,2,1,0}; int array2d[][]; //pseudo code array2d = array1 + array2 所以 array2d[0][0]; //=1 (first member of array1) array2d[1][0]; //=9 (f

如果我有几个相同数据类型的数组,那么将它们全部复制到二维数组中的最佳方法是什么。比如说

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int array2d[][];
//pseudo code array2d = array1 + array2
所以

array2d[0][0]; //=1 (first member of array1)
array2d[1][0]; //=9 (first member of array2)

考虑到数组只是指向第一个元素的指针,我认为我可以这样做,但它会产生一个编译器错误

array2d[0][0] = array1;
array2d[1][0] = array2;

我猜我不能使用引用进行复制,因为数组需要它的条目在连续内存中?我可以使用类似memset的函数吗?

它不是一个实际的2D数组,但您可以将
array2d
作为指向1d数组的指针数组:

int* array2d[2];

array2d[0] = array1;
array2d[1] = array2;

否则,您必须手动复制元素。

不可能。您需要将一个元素一个元素地从一个数组复制到另一个数组

还可以使用指向int数组的指针数组模拟2d数组

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int *array2d[2]; 

array2d[0] = array1;
array2d[1] = array2;
还是这个

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int *array2d[] = {array1, array2}; 

cout << "[0][0]=" << array2d[0][0] << endl;
cout << "[1][0]=" << array2d[1][0] << endl;
int-array1[]={1,2,3,4,5,6,7,8,9,10};
int array2[]={9,8,7,6,5,4,3,2,1,0};
int*array2d[]={array1,array2};

有几件事你可以做。如果知道每个数组中的数据都是常量,则可以定义它,然后在一维和二维数组中使用它。或者,可以将元素从1D数组memcpy到2D数组。第二点说明如下:

#define ARRAY_1 { 1, 2, 3, 4, 5, 6 }
#define ARRAY_2 {7, 8, 9, 10, 11, 12 }

int array_1[] = ARRAY_1;
int array_2[] = ARRAY_2;

int two_dim_array[][] = {
    ARRAY_1,
    ARRAY_2,
}

如果需要实际的2D数组(内存中连续),则必须复制元素。但是,您可以使用一个包含2个指针的数组来模拟它:

// an ampty array
int array2d[2][10];

// pointers to parts
int *array1 = array2d[0];
int *array2 = array2d[1];

int n;

// fill "arrays"
for(int i=0, n=1; i<10; ++i, ++n) {
    array1[i] = n;
}
for(int i=0, n=9; i<10; ++i, --n) {
    array2[i] = n;
}

// now you are ready
cout << "[0][0]=" << array2d[0][0] << endl;
cout << "[1][0]=" << array2d[1][0] << endl;
int *array2d[2];
array2d[0] = array1;
array2d[1] = array2;

定义和分配

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int *array2d[2];
array2d[0] = array1;
array2d[1] = array2;
printf("%d\t",array2d[0][0]);
printf("%d\t",array2d[0][9]);
printf("%d\t",array2d[1][5]);
测试

int array1[] = {1,2,3,4,5,6,7,8,9,10};
int array2[] = {9,8,7,6,5,4,3,2,1,0};

int *array2d[2];
array2d[0] = array1;
array2d[1] = array2;
printf("%d\t",array2d[0][0]);
printf("%d\t",array2d[0][9]);
printf("%d\t",array2d[1][5]);

它给出了
1104

“考虑数组只是指向第一个元素的指针”。。。不,不,不,数组不是指向第一个元素的指针,这就解释了为什么它不工作(进一步阅读:and)。这就是我通常会这样做的,但是它发送到一个api函数,该函数需要一个类似“**datatype”的数组。api需要
**datatype
还是
datatype[][]
?你可能应该阅读评论中的问题链接,那里有很多好的信息。