有没有方便的方法来创建矩阵而不使用malloc?这种作品:
int *arr2d[3];
int arr0[] = { 0 };
int arr1[] = { 0, 1 };
int arr2[] = { 0, 1, 2 };
arr2d[0] = arr0;
arr2d[1] = arr1;
arr2d[2] = arr2;
printf(%d, arr2d[i][j]);
它不允许您轻松遍历这些值,因为您无法获得每个子阵列的大小,因为您可以使用sizeof for arr2d [3] [3]。
sizeof arr2d[i] / sizeof arr2d[i][0]
有没有更好的方法呢?
供参考,以下是与C ++相同的问题:
答案 0 :(得分:2)
你不能这样做:在这种情况下,sizeof
被静态评估,它代表指针的大小。如果需要实现每行不同大小的锯齿状数组,则有两种选择:
row+1
)你根本不存储任何东西size_t len[rows]
,并单独存储每个长度。答案 1 :(得分:1)
使用结构和复合文字只能在堆栈上完成。
typedef struct
{
size_t size ;
int* a ;
} jag_array ;
jag_array m[] = { { 3 , ( int[] ){ 1,2,3 } } ,
6 , ( int[] ){ 1,2,3,4,5,6 } ,
4 ,( int[] ){ 1,2,3,4 } } ;
这有局限性。复制结构时,不会复制数组本身。
单独的函数和宏可以帮助处理这个,但它不是那么漂亮。