[英]Initialize 2D array in C using array of pointers
我有一个 static 数组,我想用它来使用指针初始化动态数组。
现在我有这个:
boardinit[BOARD_HEIGHT][BOARD_LENGTH] = {
{-4, -2, -3, -5, -6, -3, -2, -4},
{-1, -1, -1, -1, -1, -1, -1, -1},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1},
{4, 2, 3, 5, 6, 3, 2, 4},
};
int main()
{
int board[BOARD_HEIGHT][BOARD_LENGTH];
initboard(board);
for (int j = 0; j < BOARD_HEIGHT; j++)
{
for (int i = 0; i < BOARD_LENGTH; i++)
printf("%d ", board[j][i]);
printf("\n");
}
return 0;
}
void initboard(int (*pboard)[BOARD_HEIGHT])
{
for(int i = 0;i<BOARD_HEIGHT;i++)
pboard[i] = boardinit + i;
}
我希望board[BOARD_HEIGHT][BOARD_LENGTH]
BOARD_LENGTH] 通过使用指针将 board 传递给initboard()
来初始化为boardinit[BOARD_HEIGHT][BOARD_LENGTH]
,但似乎无法将其传递给 go。
要将内容boardinit
复制到board
的值,只需使用以下命令:
memcpy(board, boardinit, sizeof(board));
如果这不起作用,请尝试以下操作:
void initboard(int pboard[BOARD_HEIGHT][BOARD_LENGTH]) {
for (int i = 0; i < BOARD_HEIGHT; i++)
for (int j = 0; j < BOARD_LENGTH; j++)
pboard[i][j] = boardinit[i][j];
}
“我有一个 static 数组,我想用它来使用指针初始化一个动态数组。”
arrays 指针的问题在于,每次调用[m][c]alloc()
都不能保证(实际上不太可能)提供 memory 的单个连续块。 即,这是提供 memory 的许多小区域的常用方法:
int **array = malloc(sizeof(width * sizeof(int *));
{
for(int i=0; i<width; i++)
{
array[i] = malloc(height*sizeof(int));
}
}
因此,初始化程序需要分成几个 memory 块位置。
一种更简单、更有效的方法是使用单个动态 memory 分配调用,保证 memory 的单个连续块,然后可以使用初始化器到从[m][c]alloc()
返回的指针位置执行单个memcpy()
[m][c]alloc()
。 那么唯一的问题是如何使用数组表示法访问 memory 区域。 下面的示例说明了如何使用*(ptr + index)
表示法来完成...
//assuming your other code above
int main(void)
{
int elements = BOARD_HEIGHT*BOARD_LENGTH;
int *pArray = calloc(elements, sizeof(int));
if(pArray)
{
memcpy(pArray, boardinit, sizeof boardinit);
for(int i=0; i<BOARD_HEIGHT;i++)
for(int j = 0;j<BOARD_LENGTH;j++)
printf("%d\n", *(pArray + (i + j)));
free(pArray);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.