Chinaunix

标题: 多维数组如何在堆中声明 ?? [打印本页]

作者: HopeCao    时间: 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]

哪个对 ?哪个错 ?错在哪里 ??
作者: stroustrup    时间: 2003-02-25 11:00
标题: 多维数组如何在堆中声明 ??
第二个对。
作者: stroustrup    时间: 2003-02-25 11:04
标题: 多维数组如何在堆中声明 ??
来而不往非理也,请问:

char **a;

如何 new ?
作者: 无双    时间: 2003-02-25 17:40
标题: 多维数组如何在堆中声明 ??
不会吧
很高深
这样的代码要维护的人水平很高才行

当然这样的问题对大家理解C/C++都很有用
作者: zhutr    时间: 2003-02-25 18:56
标题: 多维数组如何在堆中声明 ??
原帖由 "stroustrup" 发表:
来而不往非理也,请问:

char **a;

如何 new ?


a=new char[m];
for(i=0;i<m;i++)
{
a=new char[n];
}
瞎写的,快说答案吧,偶都等了好久了。
作者: dido    时间: 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等
作者: JohnBull    时间: 2003-02-26 20:53
标题: 多维数组如何在堆中声明 ??
原帖由 "dido" 发表:
∧诖妫??一挂?孪瘸跏蓟???故强梢越?妥啪陀美病?

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


我觉得搂主既然提出在堆中实现数组,恐怕是要动态使用,否则没必要。
你这种方法调整起来恐怕不方便,堆的利用率不高,以前菜青虫提出过一种方法很实用,找找看。
作者: zhutr    时间: 2003-02-27 10:02
标题: 多维数组如何在堆中声明 ??
原帖由 "stroustrup" 发表:
来而不往非理也,请问:

char **a;

如何 new ?


up and waiting!
作者: 无双    时间: 2003-02-27 10:07
标题: 多维数组如何在堆中声明 ??
答案呢
作者: stroustrup    时间: 2003-02-28 12:11
标题: 多维数组如何在堆中声明 ??
大家说的很好。其实指向指针的指针不好理解,应用时可以进化成数组指针或指针数组(表述可能不准确)。
char **a 确实不好 new。

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

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

期待更好的做法。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2