您不能按照您的方式将1D 数组插入2D 数组。使用memcpy将1D数组的元素复制到2D数组中,如下所示:
memcpy(collection[1], data, 2 * sizeof(int));
这会将data 数组的2 整数元素复制到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() 函数的参数不兼容。 insert()函数的第二个参数应该是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;
}
输出:
# ./a.out
collection[0][0] : 1 collection[0][1] : 3
collection[1][0] : 1 collection[1][1] : 3