在 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# 中存在这样的数组。:)
我是一名优秀的程序员,十分优秀!