【问题标题】:Inserting 1D array to 2D array将一维数组插入二维数组
【发布时间】:2022-01-06 02:11:15
【问题描述】:

我们可以直接将一维数组插入二维数组吗?

例如我有这个代码:

void insert(int[]data , int**collection)
{
collection[1] = data
}
int main()
{
int data[2]= {1,3}
int collection[2][2];
insert(data,&collection);
}

这行得通吗?

【问题讨论】:

  • 你试过了吗?发生了什么?
  • 如果你以不同的方式定义你的数组,你可以这样做。
  • int ** 不是二维数组。它可用于以“类似二维”的方式管理数据。但它仍然与int [2][2] 完全不同。哦,你不能在 C 中做数组赋值(除非它是结构赋值的一部分),只能做指针赋值。
  • @HAL9000 如何在 c 中通过引用调用二维数组?
  • @HAL9000 “哦,你不能在 C 中进行数组赋值(除非它是结构赋值的一部分),只能进行指针赋值”你的意思是这行代码错了吗?”collection[ 1] = 数据”?

标签: arrays c pass-by-reference


【解决方案1】:

您不能按照您的方式将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 

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    相关资源
    最近更新 更多