将一维数组插入二维数组

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 数组。使用memcpy1D数组的元素复制到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