免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2031 | 回复: 9
打印 上一主题 下一主题

多维数组如何在堆中声明 ?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-25 10:39 |只看该作者 |倒序浏览
1) int nArray[40][5] = new int[40][5]
2) int (*nArray)[5] = new int[40][5]
3) int* nArray[5] = new int[40][5]
4) int* nArray = new int[40][5]

哪个对 ?哪个错 ?错在哪里 ??

论坛徽章:
0
2 [报告]
发表于 2003-02-25 11:00 |只看该作者

多维数组如何在堆中声明 ??

第二个对。

论坛徽章:
0
3 [报告]
发表于 2003-02-25 11:04 |只看该作者

多维数组如何在堆中声明 ??

来而不往非理也,请问:

char **a;

如何 new ?

论坛徽章:
0
4 [报告]
发表于 2003-02-25 17:40 |只看该作者

多维数组如何在堆中声明 ??

不会吧
很高深
这样的代码要维护的人水平很高才行

当然这样的问题对大家理解C/C++都很有用

论坛徽章:
0
5 [报告]
发表于 2003-02-25 18:56 |只看该作者

多维数组如何在堆中声明 ??

原帖由 "stroustrup" 发表:
来而不往非理也,请问:

char **a;

如何 new ?


a=new char[m];
for(i=0;i<m;i++)
{
a=new char[n];
}
瞎写的,快说答案吧,偶都等了好久了。

论坛徽章:
0
6 [报告]
发表于 2003-02-26 15:34 |只看该作者

多维数组如何在堆中声明 ??

可以先申请足够的空间,然后转换成你所要的任何类型空间。


  1. #include <stdlib.h>;
  2. #include <stdio.h>;

  3. typedef short int int16;

  4. void   *buf;
  5. int    *nInt[5];  //[5][10]
  6. int16  *nInt16;   //[5]

  7. int init()
  8. {
  9.   int i;

  10.   buf = malloc( 5*10*sizeof(int)+5*sizeof(int16) );
  11.   if( buf == NULL ) return -1;

  12.   bzero( buf, 5*10*sizeof(int)+5*sizeof(int16) );

  13.   for( i=0; i<5; i++ )
  14.     nInt[i] = buf+10*sizeof(int);

  15.   nInt16 = buf + 5*10*sizeof(int);

  16.   return 0;
  17. }

  18. int main()
  19. {
  20.   int i,j;
  21.   if( init() ){
  22.     printf("Init Error\n");
  23.     return -1;
  24.   }

  25.   printf("Init OK.\n" );

  26.   for( i=0; i<5; i++ ){
  27.     for( j=0; j<10; j++ )
  28.       nInt[i][j] = i*j;
  29.     nInt16[i] = i;
  30.   }

  31.   return 0;
  32. }

复制代码


这是的二维数组虽然不像直接定义的int Arrary[5][10]那样省内存,而且还要事先初始化,但还是可以将就着就用啦。

这种用法在共享内存中经常用到,类型可以为任何类型,如struct等

论坛徽章:
0
7 [报告]
发表于 2003-02-26 20:53 |只看该作者

多维数组如何在堆中声明 ??

原帖由 "dido" 发表:
∧诖妫??一挂?孪瘸跏蓟???故强梢越?妥啪陀美病?

这种用法在共享内存中经常用到,类型可以为任何类型,如struct等


我觉得搂主既然提出在堆中实现数组,恐怕是要动态使用,否则没必要。
你这种方法调整起来恐怕不方便,堆的利用率不高,以前菜青虫提出过一种方法很实用,找找看。

论坛徽章:
0
8 [报告]
发表于 2003-02-27 10:02 |只看该作者

多维数组如何在堆中声明 ??

原帖由 "stroustrup" 发表:
来而不往非理也,请问:

char **a;

如何 new ?


up and waiting!

论坛徽章:
0
9 [报告]
发表于 2003-02-27 10:07 |只看该作者

多维数组如何在堆中声明 ??

答案呢

论坛徽章:
0
10 [报告]
发表于 2003-02-28 12:11 |只看该作者

多维数组如何在堆中声明 ??

大家说的很好。其实指向指针的指针不好理解,应用时可以进化成数组指针或指针数组(表述可能不准确)。
char **a 确实不好 new。

dido 的做法不错,但利用率不高。

zhutr 的做法比较实用,但有危险,且a=new char[m]; 是错误的。

期待更好的做法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP