CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

C++中二维数组不能动态生成么?

楼主liuchang2859(liuchang)2005-09-23 23:56:38 在 C/C++ / C++ 语言 提问

比如有两个字符串s,t  
  int   lenghofS=strlen(s);  
  int   lenghofT=strlen(t);  
   
  我想生成一个以s,t的长度为行,宽的二维数组  
   
  int   matrix[lenghofS+1][lenghofT+1];      
  或者  
  int*matrix=new   int[lenghofS+1][lenghofT+1];  
   
  好象都是不行的  
   
  请问有什么方法么?  
   
  谢! 问题点数:20、回复次数:8Top

1 楼llf_hust()回复于 2005-09-24 00:07:57 得分 4

#include<iostream.h>  
  #include<string.h>  
  int   main()  
  {  
  char   *s   =   "abcd",   *t   =   "hustwuhan";  
                    int   i,**matrix,lenghofS,lenghofT;  
  lenghofS   =   strlen(s);  
  lenghofT   =   strlen(t);  
                    matrix   =   new   int*[lenghofS+1];  
  for(i=0;   i   <   lenghofS+1;   i++)  
  matrix[i]   =   new   int[lenghofT+1];  
  for(i=0;   i   <   lenghofS+1;   i++)  
  delete   []matrix[i];  
  delete   []matrix;  
  return   0;  
  }Top

2 楼fiftymetre(50米深蓝)回复于 2005-09-24 00:17:12 得分 0

//测试通过!!  
  typedef   float   F8[8];  
  float   (*pF8)[8];  
  float   *pf;  
  F8*   pFF=new   F8[100];  
  pF8=new   float[32][8];  
  pf=new     float[32*8];  
  pF8=(F8*)pf;  
  pF8=(float(*)[8])pf;  
  Top

3 楼fiftymetre(50米深蓝)回复于 2005-09-24 00:17:58 得分 4

再一种  
  可以有很多方法,殊途同归。  
  无论是几维数组,在内存空间都是一个个连续存放的,都可以看成一维的。  
  所以可以这样:  
  int   *   arrayDynamic   =   new   int(row*col);//row,col分别是你要生成的数组的行列数  
  然后就可以像数组一样使用了。  
  for(int   i=0;i<row;i++){  
        for(int   j=0;j<col;j++){  
              arrayDynamic[i*col+j]=i+j;  
              cout<<arrayDynamic[i*col+j]<<endl;  
        }  
  }  
  不过有个不好的地方是,因为arrayDynamic是指针,所以用arrayDynamic[i]可能会超出你想要得范围之外,到达数组以外的内存空间。因此有必要检查坐标是否越界。  
   
  可以了吗呵呵  
  Top

4 楼zhouhuahai(道号"虚无")回复于 2005-09-24 09:09:57 得分 4

楼上的根本就是没回答到点子上,第一个只有一个是变量,另一个却还是常量.  
  int   **matrix;  
  matrix   =   new   int*[lenghofS+1];  
  for(int   i   =   0   ;   i<lenghofS+1;   i++)  
            matrix   =   new   int[lenghofT];  
  .............  
   
  方法二:  
  vector<vector<int>   >   matrix;  
  这里matrix可以有任意个元素.  
  Top

5 楼zhouhuahai(道号"虚无")回复于 2005-09-24 09:51:57 得分 0

回复人:   fiftymetre(离人行.丽人涕)   (   )   信誉:100     2005-09-24   00:17:00     得分:   0      
   
        再一种  
  可以有很多方法,殊途同归。  
  无论是几维数组,在内存空间都是一个个连续存放的,都可以看成一维的。  
  所以可以这样:  
  int   *   arrayDynamic   =   new   int(row*col);//row,col分别是你要生成的数组的行列数  
  然后就可以像数组一样使用了。  
   
   
  严重错误!      
    int   *   arrayDynamic   =   new   int(row*col);  
  这里的arrayDynamic     new了一个int指针变量,其所指向的内容为row*col  
  Top

6 楼ratzip(小小)回复于 2005-09-24 09:53:53 得分 3

int   i,   line,row;  
  int   **p;  
  cout<<"please   input   line   number";  
  cin>>line;  
  p=new   int   *[line];  
  cout<<"please   input   row   number";  
  cin>>row;  
  for(i=0;i<row;i++)  
        p[i]=new   int   [row];  
           
  //以上构造2维数组  
  for(i=0;i<row;i++)  
              delete[]   p[i];  
  delete[]   p;  
  p=NULL;  
  //释放空间  
  Top

7 楼foochow(无聊,灌水......)回复于 2005-09-24 09:54:34 得分 0

路过JFTop

8 楼smily2004()回复于 2005-09-24 10:33:27 得分 5

#include   <iostream>  
   
  using   namespace   std;  
   
  template   <class   T>  
  void   dynamic_2d_array(   T   **   &x,   int   rows,   int   cols)  
  {  
  //   Create   2-D   array  
  //   create   row   pointer  
  x   =   new   T   *[rows];  
  //   allocate   memeory   for   every   row  
  for   (int   i=0;   i<rows;   ++i)  
  x[i]   =   new   T   [cols];  
  }  
   
  template   <class   T>  
  void   del_2d_array(   T   **   &x,   int   rows)  
  {  
  //   delete   2-D   array   x  
  //   dealocate   memory   of   every   row  
  for   (int   i=0;   i<rows;   ++i)  
  delete   []   x[i];  
  //   delete   row   pointer  
  delete   []   x;  
  x   =   0;  
  }  
   
  int   main()  
  {  
  double   **array_2d;  
  int   row   =   4;  
  int   col   =   3;  
   
  dynamic_2d_array(array_2d,   row,   col);  
   
  for(int   i=0;   i!=4;   ++i){  
  for(int   j=0;   j!=3;   ++j){  
  array_2d[i][j]   =   (double)(i+j);  
  cout   <<   array_2d[i][j]   <<   "   ";  
  }  
  cout   <<   endl;  
  }  
  del_2d_array(array_2d,   row);  
  }  
  Top

相关问题

  • 如何动态生成二维数组
  • 一个C#二维数组问题
  • 二维数组
  • VC中如何进行二维数组动态生成?
  • 怎样动态的生成二维字符串数组?
  • 如何使用new操作符一次生成二维数组?
  • 呵呵,怎样生成动态的二维数组呀???????
  • 动态生成的二维数组赋值问题!
  • c++中二维数组、一维数组指针、二级数组之间的关系
  • oracle 二维数组

关键词

  • lenghofs
  • 数组
  • lenghoft
  • 生成
  • arraydynamic
  • matrix
  • rows
  • strlen
  • cols
  • array

得分解答快速导航

  • 帖主:liuchang2859
  • llf_hust
  • fiftymetre
  • zhouhuahai
  • ratzip
  • smily2004

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo