繁体   English   中英

将一维数组插入二维数组

[英]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 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM