3

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

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 吗?

4

5 回答 5

3

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

您也可以使用指向整数数组的指针数组来模拟二维数组。

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;

或反向

如果您的目标是向某些 API 呈现二维数组,那么您应该重构您的一方。例如,您可以使用指针模拟一维数组:

// 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;
于 2012-12-18T15:26:13.863 回答
2

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

int *array2d[2];
array2d[0] = array1;
array2d[1] = array2;
于 2012-12-18T15:29:04.573 回答
1

定义和分配

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]);

它给1 10 4

于 2012-12-18T15:37:20.143 回答
1

它不是一个实际的二维数组,但您可以创建array2d一个指向一维数组的指针数组:

int* array2d[2];

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

否则,您将不得不手动复制元素。

于 2012-12-18T15:22:41.263 回答
1

您可以做几件事。如果您知道您的数据将在每个数组中保持不变,您可以#define这样做,然后在您的 1D 和 2D 数组中使用它。或者,您可以将元素从 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,
}
于 2012-12-18T15:29:00.993 回答