在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 ) );
}
Run Code Online (Sandbox Code Playgroud)
考虑到您需要手动初始化每一行.
在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;
}
Run Code Online (Sandbox Code Playgroud)
虽然容器更好std::vector.
输出是
1 2 3
2 3
1 2 3 4
Run Code Online (Sandbox Code Playgroud)
还要考虑到C#中存在这样的数组.:)