当前位置: 代码迷 >> C语言 >> 动态申请二维数组空间
  详细解决方案

动态申请二维数组空间

热度:235   发布时间:2008-03-19 15:08:12.0
动态申请二维数组空间
short **Alloc_Short_Img (char x_size,char y_size)
{
    char m;
    short **map ;
    short *array;
    map = (short **)malloc(sizeof(short) * x_size * y_size);
    for(m=0;m<y_size;m++)
    {
        array = (short *)malloc(sizeof(short) * x_size);
        map[m] = array ;
    }
    return map;
}

short **Alloc_Short_Img (char x_size,char y_size)
{
    char m;
    short **map,*array;
    map = (short **)malloc(sizeof(short*) * y_size);
    array = (short *)malloc(sizeof(short) * x_size * y_size);
    for(m=0;m<y_size;m++)
    {
        map[m] = &array[m*x_size] ;
    }
    return map;
}
上面的两种方法,哪一种比较好呢  ??
搜索更多相关的解决方案: 动态  空间  申请  

----------------解决方案--------------------------------------------------------
顶上去..在学呢
----------------解决方案--------------------------------------------------------
真强。指针我怎么老是不会用
----------------解决方案--------------------------------------------------------
谁给个注释吧...
我不怎么懂..
----------------解决方案--------------------------------------------------------
再顶一下
----------------解决方案--------------------------------------------------------
我支持第二种,感觉是.
----------------解决方案--------------------------------------------------------
顶上去再看看
----------------解决方案--------------------------------------------------------
第一个程序是不是写错了?
修改如下:
程序代码:

short **Alloc_Short_Img (char x_size,char y_size)
{
    char m;
    short **map ;
    short *array;
    map = (short **)malloc(zsizeof(short *) * y_size);
    for(m=0;m<y_size;m++)
    {
        array = (short *)malloc(sizeof(short) * x_size);
        map[m] = array ;
    }
    return map;
}

或许你还在玩tc的图形编程,那里short和short *都是2字节。

很显然,程序2要好。
两个程序的相同点:都是需要申请sizeof(short) * x_size * y_size + zsizeof(short *) * y_size
不同点:程序一是每次申请sizeof(short) * x_size个字节,一共申请y_size次,程序二是一次性申请sizeof(short) * x_size * y_size个字节。

从不同点可以看出程序一笨拙且没有必要,多次调用malloc函数明显造成了时间的浪费,能一次申请够何必如此麻烦?还有隐含的空间的浪费,因为堆中需要结构体记录每次申请空间信息,这是系统层隐含的开销。

另外动态申请二维数组很少使用,因为这玩意儿实在没什么用,用一维数组模拟就可以了,还节省记录高维信息占用的空间,每做一次数据访问只需要读一次内存,你构造的多维有几维访问几次。
----------------解决方案--------------------------------------------------------
  相关解决方案