[英]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
數組。 使用memcpy
將1D
數組的元素復制到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.