动态申请二维数组空间
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函数明显造成了时间的浪费,能一次申请够何必如此麻烦?还有隐含的空间的浪费,因为堆中需要结构体记录每次申请空间信息,这是系统层隐含的开销。
另外动态申请二维数组很少使用,因为这玩意儿实在没什么用,用一维数组模拟就可以了,还节省记录高维信息占用的空间,每做一次数据访问只需要读一次内存,你构造的多维有几维访问几次。
----------------解决方案--------------------------------------------------------