如何解决在C中动态创建2D数组
我正在编写一个程序,该程序将数字作为输入并将其存储在2D数组中。我输入的数字是四个数字的块,例如1块和2块:
from:
就像俄罗斯方块。但是我希望存储块的2D数组与代码所需的高度一样高。例如,在这种情况下,数组的高度应为4。宽度始终为7。
另一个例子:
[1][-][-][-]
[1][-][-][-]
[1][-][2][-]
[1][2][2][2]---> width 7
在这里,它的高度应该为5。
我的问题是,如何在不知道2D阵列能得到多高的情况下创建2D阵列?我只有在程序执行结束时才知道。使用[3][3][3][3]
[1][-][-][-]
[1][-][-][-]
[1][-][2][-]
[1][2][2][2]---> width 7
吗?
输入可能多达500个块或5。
非常感谢:)
解决方法
分配一个初始数组,比方说8行。维护两个计数器,一个计数器说明有多少行,一个计数器已使用多少行。如果您用完了所有行,请realloc
将数组替换为将其大小加倍,并用数组有多少行更新计数器。在文档中查找realloc
。这是一个例子。
int input(void){
static int x;
return(x++ < 15);
}
void example(void)
{
int (*A)[][7];
int i=0,j,n_rows,n_used=0;
A= malloc(sizeof((*A)[0])*8);
n_rows= 8;
while (input())
{
if (n_used==n_rows) {
// reallocate the array
int (*tmp)[][7];
if (!(tmp= realloc(A,sizeof((*A)[0])*(n_rows+8)))) return; // out of memory
A= tmp;
n_rows += 8;
}
// add the input to the array
for (j=0; j<7; j++)
(*A)[n_used][j]= i++;
// update used count
n_used++;
}
printf("rows: %d; used: %d\n",n_used);
for (i=0; i<n_used; i++) {
for (j=0; j<7; j++) {
printf ("%d ",(*A)[i][j]);
}
printf ("\n");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。