簡體   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