我的array是一个两用数组,结构如下:
array:[.........][[....][....][....]...]
索引部分 实际二维数组
索引部分是一个int的指针数组,指向后面二维数组的每个行数组,这样,如果一个函数需要int**作为参数,就可以直接把array传给他。
实际的二维数组是真正的二维数组,其内存布局和C内置的二维数组完全一样,所以如果一个函数需要int arr[][COLS]作参数,可以直接传给他(int(*)[COLS])&array[m]。
而且,如果你的函数只接受一维数组,那么也可以直接把后面的二维数组传给它,让它自己做变换:(int*)&array[m]。
换言之,这种方法申请的动态二维数组,适合任何需要使用二维数组的情况。唯一的缺点是因为需要索引部分,所以占内存可能大些,不过这是和传统的分配方法占内存一样大的。
array:[.........][[....][....][....]...]
索引部分 实际二维数组
索引部分是一个int的指针数组,指向后面二维数组的每个行数组,这样,如果一个函数需要int**作为参数,就可以直接把array传给他。
实际的二维数组是真正的二维数组,其内存布局和C内置的二维数组完全一样,所以如果一个函数需要int arr[][COLS]作参数,可以直接传给他(int(*)[COLS])&array[m]。
而且,如果你的函数只接受一维数组,那么也可以直接把后面的二维数组传给它,让它自己做变换:(int*)&array[m]。
换言之,这种方法申请的动态二维数组,适合任何需要使用二维数组的情况。唯一的缺点是因为需要索引部分,所以占内存可能大些,不过这是和传统的分配方法占内存一样大的。