繁体   English   中英

如何用C中的不同列创建二维数组?

[英]How to create a 2d array with different column in C?

在Python中,我可以拥有数据:

lst = [[1,2,3],[2,3],[1,2,3,4]]

然后由lst [i] [j]访问。

我该如何在C语言中实现?

您只能通过为数组的每一行动态分配内存并在其他数组中保留每一行的大小来做到这一点。 例如

int sizes[3] = { 3, 2, 4 };

int **a = malloc( 3 * sizeof( int * ) );

for ( int i = 0; i < 3; i++ )
{
   a[i] = malloc( size[i] * sizeof( int ) );
}

考虑到您将需要手动初始化每一行。

在C ++中,可以在分配行时初始化行。 例如

#include <iostream>

int main() 
{
    const size_t N = 3;
    size_t sizes[3] = { 3, 2, 4 };

    int **a = new int * [N];

    a[0] = new int[sizes[0]] { 1 ,2, 3 };
    a[1] = new int[sizes[1]] { 2, 3 };
    a[2] = new int[sizes[2]] { 1, 2, 3, 4 };

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < sizes[i]; j++ ) std::cout << a[i][j] << ' ';
        std::cout << std::endl;
    }

    for ( size_t i = 0; i < N; i++ ) delete [] a[i];
    delete [] a;

    return 0;
}

尽管最好使用容器std::vector

输出是

1 2 3 
2 3 
1 2 3 4 

还应考虑到C#中存在此类数组。

这应该对您有帮助。

int lst[][4]={{1, 2, 3}, {2, 3}, {1, 2, 3, 4}};
#include <stdio.h>

int main(void){
    int *array[] = {
        (int []){1,2,3},
        (int []){2,3},
        (int []){1,2,3,4}
    };
    int a_len[] = {3,2,4};
    int i,j;
    for(i=0;i<sizeof(a_len)/sizeof(*a_len);++i){
        for(j=0;j<a_len[i]; ++j){
            printf("%d ", array[i][j]);
        }
        printf("\n");
    }

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM