LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: hoho_zhao

可否动态改变C++数组维度?

[复制链接]
发表于 2007-1-8 18:49:28 | 显示全部楼层
Post by izzystar
别用C++了, 用Common Lisp或Scheme吧, 想怎么改都成.


很多脚本语言都可以吧
回复 支持 反对

使用道具 举报

发表于 2007-1-8 19:59:22 | 显示全部楼层
参考下这个:;)
  1. /*
  2. * ===  FUNCTION  ==============================================================
  3. *         Name:  calloc_int_matrix
  4. *  Description:  Allocate a dynamic int-matrix of size rows*columns; return a pointer.
  5. * =============================================================================
  6. */
  7. int**
  8. calloc_int_matrix ( int rows, int columns )
  9. {
  10.   int   i;
  11.   int **m;
  12.   m     = calloc ( rows, sizeof(int*) );        /* allocate pointer array     */
  13.   assert( m != NULL );                          /* abort if allocation failed */
  14.   *m    = calloc ( rows*columns, sizeof(int) ); /* allocate data array        */
  15.   assert(*m != NULL );                          /* abort if allocation failed */
  16.   for ( i=1; i<rows; i+=1 )                     /* set pointers               */
  17.     m[i]  = m[i-1] + columns;
  18.   return m;
  19. }  /* ----------  end of function calloc_int_matrix  ---------- */

  20. /*
  21. * ===  FUNCTION  ==============================================================
  22. *         Name:  free_int_matrix
  23. *  Description:  Free a dynamic int-matrix.
  24. * =============================================================================
  25. */
  26. void
  27. free_int_matrix ( int **m )
  28. {
  29.   free(*m);                                     /* free data array            */
  30.   free( m);                                     /* free pointer array         */
  31.   return ;
  32. }  /* ----------  end of function free_int_matrix  ---------- */

复制代码
回复 支持 反对

使用道具 举报

发表于 2007-1-8 22:17:13 | 显示全部楼层
Post by rickxbx
这样可不可以?
void * array = malloc(i*j);
array = realloc(array, i*j*k);

用一维的算当然可以,我是说写成[j][k]这种直观的形式是不行的。
回复 支持 反对

使用道具 举报

发表于 2007-1-8 22:34:29 | 显示全部楼层
考虑一下用STL。。。vector 套 vector..... *0*
回复 支持 反对

使用道具 举报

发表于 2007-1-9 09:25:01 | 显示全部楼层
Post by gamedragon
用一维的算当然可以,我是说写成[j][k]这种直观的形式是不行的。


参看 rushrush 兄的代码, 三维的如法炮制, 另外,要将 int** 改成 void *
当要使用的时候再将 void * 强转成 int** 或者  int***, 视上下文而定
这些就是一开始我要表达的意思
回复 支持 反对

使用道具 举报

发表于 2007-1-9 09:46:31 | 显示全部楼层
rushrush兄的代码我当然看得懂,类似代码也实现过,我的意思看来要用代码说明一下。
  1. int x, y, z;
  2. for(x=1; x<10; ++x)
  3.     for(y=1; y<10; ++y)
  4.         for(z=1; z<10; ++z) {
  5.             int a[x][y][z];
  6.             ........
  7.         }
复制代码

这种写法应该没有一个编译器支持吧,就算重载[]操作符也达不到这种效果
回复 支持 反对

使用道具 举报

发表于 2007-1-11 12:37:38 | 显示全部楼层
Post by gamedragon
rushrush兄的代码我当然看得懂,类似代码也实现过,我的意思看来要用代码说明一下。
  1. int x, y, z;
  2. for(x=1; x<10; ++x)
  3.     for(y=1; y<10; ++y)
  4.         for(z=1; z<10; ++z) {
  5.             int a[x][y][z];
  6.             ........
  7.         }
复制代码

这种写法应该没有一个编译器支持吧,就算重载[]操作符也达不到这种效果


这个.... 自然不行
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表