微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C中动态创建2D数组

如何解决在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 举报,一经查实,本站将立刻删除。