在Python中,我可以拥有数据:
lst = [[1,2,3],[2,3],[1,2,3,4]]
然后由lst [i] [j]访问。
我怎样才能在C中实现这个目标?
答案 0 :(得分:5)
只能通过为数组的每一行动态分配内存并将每行的大小保持在其他数组中来执行相同的操作。 例如
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#:)
中答案 1 :(得分:4)
这应该对你有所帮助。
int lst[][4]={{1, 2, 3}, {2, 3}, {1, 2, 3, 4}};
答案 2 :(得分:2)
#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;
}