话说这C中的动态获取二维数组好比艺术作品中的爱情(好烂的比喻~~),都是永恒而难缠的主题。假期写并行的作业,又碰到了这个问题,依然绞尽脑汁。
其实二维数组理解起来是很容易的,一维的是void *,二维自然就是void **,高维以此类推。然而多了一个和数个*好比一个“不可逾越的障壁”。不过直接申请**,初始化很难并且退回也很难。上次遇到的时候就直接malloc了一个width * height大小的区域,然后写一个取值的宏。看起来很丑陋。这次决定做个了断。搜到台湾一个技术论坛,找到了这个终极方案,真的很妙~
原帖地址:http://y120062140.win.aplus.net/pc2020v5/forum/showSameTitleN.asp?board_pc2020=c&id=34046&keyword=
原帖讨论了至少2种方案,不再赘述。最好的方案是“ma_hty(白老鼠(Gary))”的那个。程序如下:
void
**
malloc2d(
int
w,
int
h,
int
size)
{
int j;
int rowSize = w * size;
int indexSize = h * sizeof(void *);
void **a = (void **) malloc(indexSize
其实二维数组理解起来是很容易的,一维的是void *,二维自然就是void **,高维以此类推。然而多了一个和数个*好比一个“不可逾越的障壁”。不过直接申请**,初始化很难并且退回也很难。上次遇到的时候就直接malloc了一个width * height大小的区域,然后写一个取值的宏。看起来很丑陋。这次决定做个了断。搜到台湾一个技术论坛,找到了这个终极方案,真的很妙~
原帖地址:http://y120062140.win.aplus.net/pc2020v5/forum/showSameTitleN.asp?board_pc2020=c&id=34046&keyword=
原帖讨论了至少2种方案,不再赘述。最好的方案是“ma_hty(白老鼠(Gary))”的那个。程序如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)