如何在C中创建具有不同列的二维数组?

2024-04-26 09:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

然后由lst[i][j]访问。你知道吗

如何在C中实现这一点?你知道吗


Tags: 数据lst
3条回答

只有为数组的每一行动态分配内存并保持其他数组中每一行的大小,才能做到这一点。 例如

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#中存在这样的数组:)

#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;
}

这应该对你有帮助。你知道吗

int lst[][4]={{1, 2, 3}, {2, 3}, {1, 2, 3, 4}};

相关问题 更多 >