[英]Inserting 1D array to 2D array
我们可以直接将一维数组插入二维数组吗?
例如我有这个代码:
void insert(int[]data , int**collection)
{
collection[1] = data
}
int main()
{
int data[2]= {1,3}
int collection[2][2];
insert(data,&collection);
}
这行得通吗?
您不能按照您的方式将一1D
数组插入2D
数组。 使用memcpy
将1D
数组的元素复制到2D
数组,如下所示:
memcpy(collection[1], data, 2 * sizeof(int));
这会将data
数组的2
integer 元素复制到collection[1]
。
此外,您的代码中存在一些问题。 让我们讨论它们:
第一的:
insert(data,&collection);
^
您不需要传递collection
的地址。 请注意,当在表达式中使用数组时,将转换为指向其第一个元素的指针(此规则很少有例外)。 这意味着,当您传递collection
时,它将转换为类型int (*)[2]
。 做就是了:
insert(data, collection);
第二:
void insert(int[]data , int**collection)
int[]data
错误。 insert()
的第一个参数应该是int data[2]
或int data[]
,两者都等价于int * data
。 您可以使用其中任何一个。
insert()
的第二个参数是collection
数组,它是一个2D
整数数组。 当您将其传递给insert()
时,它将衰减为类型为int (*)[2]
的指针。 insert()
的第二个参数的类型是int **
,它与您传递给insert()
function 的参数不兼容。 insert()
function 的第二个参数应该是int collection[2][2]
或int collection[][2]
,两者都等价于int (*collection)[2]
。
把这些放在一起,你可以这样做:
#include <stdio.h>
#include <string.h>
#define ROW 2
#define COL 2
void insert(int data[ROW], int collection[ROW][COL]) {
//for demonstration purpose, copying elements of data array
//to all elements (1D array) of collection array.
for (int i = 0; i < ROW; ++i) {
memcpy(collection[i], data, COL * sizeof(int));
}
}
int main(void) {
int data[COL] = {1, 3};
int collection[ROW][COL];
insert(data, collection);
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
printf("collection[%d][%d] : %d ", i, j, collection[i][j]);
}
printf("\n");
}
return 0;
}
Output:
# ./a.out
collection[0][0] : 1 collection[0][1] : 3
collection[1][0] : 1 collection[1][1] : 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.