CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

如何动态生成二维数组

楼主whg1016()2005-08-23 23:27:35 在 C/C++ / C++ 语言 提问

各位:  
          大家好,在C++中,如何动态的生成一个二维数组,我在程序中是这样做的:  
          int   dim;  
          cin   >>   dim  
          int*   M   =   new   int   [dim][dim];  
          出现的错误是:类型不能从   int[][dim]到int;  
          那么请问各位大哥,在C++中如何使用指针控制数组以及里面的元素;  
          谢谢!!!  
  —————————————————————————————————————————————  
  还有个问题!  
  如:定义了一个二维数组  
  int   a[][3];  
  现在我要用一个指针来控制这个二维数组,而不是用a  
  这个指针要如何定义。  
  该怎么写?  
  int*   p=a;  
  还是  
  int**   p   =a;  
  请各位大侠指教!!!  
  —————————————————————————————————————————————  
  再谢了! 问题点数:20、回复次数:11Top

1 楼sunman1982(冥王星)回复于 2005-08-23 23:38:33 得分 15

#include   <iostream>  
  using   namespace   std;  
   
  int   main()  
  {  
  int**   pnum=new   int*[4];  
  cout<<endl<<"1.   Set   values";  
  for   (int   i=0;i<4;i++)  
  pnum[i]=new   int(2*i);      
   
  cout<<endl<<"2.   Outputs   the   values";  
  for   (int   i=0;i<4;i++)  
  cout<<endl  
              <<*pnum[i];  
   
  cout<<endl<<"3.   Delete   the   values";  
  for   (int   i=0;i<4;i++)  
  delete   pnum[i];  
  delete   []   pnum;  
  return   0;  
  }  
  这个就是动态生成二维数组的代码,  
  不过在c++中,既然是c++就用vector吧,这样更好,更安全。  
   
  #include   <iostream>  
  #include   <vector>  
  #include   <iomanip>  
  using   namespace   std;  
  int   main()  
  {  
    int   i,  
            j,  
            m,   //行数  
            n;   //列数  
   
    cout   <<   "input   value   for   m,n:";  
    cin>>m>>n;  
     
    //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。  
    vector<vector<int>   >   vecInt(m,   vector<int>(n));      
    for   (i   =   0;   i   <   m;   i++)  
      for   (j   =   0;   j   <   n;   j++)  
        vecInt[i][j]   =   i*j;    
         
    for   (i   =   0;   i   <   m;   i++)  
    {  
      for   (j   =   0;   j   <   n;   j++)  
        cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j];  
      cout<<endl;  
    }  
   
    return   0;  
  }  
  ==========================  
  要用一个指针控制,那么不妨这么写。  
  int   *a   =&b[0][0];  
  或者  
  int*   a=b[0];Top

2 楼sunman1982(冥王星)回复于 2005-08-23 23:43:06 得分 0

有点乱,自己排一下看看吧。Top

3 楼snowbirdfly(专心搞好嵌入式~~~)回复于 2005-08-23 23:55:45 得分 0

int   dim;  
          cin   >>   dim  
          int*   M   =   new   int[dim][dim];  
  这样当然不行了~  
  dim为变量  
  int[dim][dim];一般为静态分配内存~但是dim必须为常量~  
  ~而这样new   int[dim][dim];申请动态空间不可以~  
  应该用指针来实现~~  
  Top

4 楼leboy(秦天宇)回复于 2005-08-24 01:18:55 得分 0

推荐用vector<vector<T>>  
   
  ===============================  
      ●           ●)   ●           ●   )   \●/   \●     
  <┃>   (┃   (┃)   ()           ┃┃       (   >    
    /\   /   )   (\   /   )           /   \       /\     
  =左三圈,右三圈,脖子扭扭,屁股扭扭,你就不会老   :)  
        作为一个程序员可不要整天对着电脑,要注意身体哦.   :)  
   
  Top

5 楼dch4890164(巴拉克)回复于 2005-08-24 08:29:44 得分 0

各位:  
          大家好,在C++中,如何动态的生成一个二维数组,我在程序中是这样做的:  
          int   dim;  
          cin   >>   dim  
          int*   M   =   new   int   [dim][dim];  
          出现的错误是:类型不能从   int[][dim]到int;  
          那么请问各位大哥,在C++中如何使用指针控制数组以及里面的元素;  
          谢谢!!!  
  —————————————————————————————————————————————  
  int   dim;  
  cin>>dim;  
  int*   m=new   *int[dim];  
  for(int   i=0;i<dim;i++)  
  m[i]=new   int[dim];  
  //上面是要生成的m[dim][dim]数组  
  而控制二维数组的方法同理  
  Top

6 楼mozart007()回复于 2005-08-24 11:43:22 得分 0

char   **chartemp;   /*现声明一个二维指针*/  
  int   column_no;   /*二维数组x方向的维数*/  
  int   line_no;   /*二维数组y方向的维数*/  
  int   i;  
  /*要用的时候先下如下代码,开辟空间*/  
  chartemp   =     (char   **)   malloc(   sizeof(   char   *)*line_no);  
  for   (i=0;i<line_no;i++)  
          {chartemp[i]=(char   *)malloc(sizeof(char)*column_no);  
          }  
  /*这样就好了*/  
  用chartemp[i][j];可以访问到此二维数组中所有的元素  
  Top

7 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2005-08-24 12:07:55 得分 0

用这个,   你就原理烦恼和BUG了.  
   
  #ifndef   __MATRIX_HPP_  
  #define   __MATRIX_HPP_  
   
  #include   "everest/common/everest.hpp"  
   
  #include   <memory.h>  
   
  _EVEREST_BEGIN_  
   
   
  template<class   _Tx>  
  class   _Alloc  
  {  
  public:  
   
  static   _Tx*   Alloc(size_t   n)  
  {  
  return   new   _Tx[n];  
  }  
   
   
  static   _Tx*   AllocEx(size_t   n)  
  {  
  return   NULL;  
  }  
   
  static   void   Free(_Tx*   _mem)  
  {  
  delete[]   _mem;  
  }  
   
  static   void   FreeEx(_Tx*   _mem)  
  {  
  }  
   
   
  };  
   
  template<class   _Tx>  
  class   _Matrix  
  {  
  public:  
  typedef   _Tx   value_type;  
  typedef   value_type*   value_array;  
   
  public:  
  _Matrix()  
  :m_data(NULL),   _row(0),   _col(0)  
  {  
  }  
   
  _Matrix(unsigned   int   x,   unsigned   int   y)  
  :m_data(NULL)  
  {  
  (_row   =   x),   (_col   =   y);  
  m_data   =   _Alloc<_Tx>::Alloc(x   *   y);  
  ::memset((void*)m_data,   NULL,   (x   *   y   *   sizeof(_Tx)));  
  }  
   
  void   construct(unsigned   int   x,   unsigned   int   y)  
  {  
  (_row   =   x),   (_col   =   y);  
  m_data   =   _Alloc<_Tx>::Alloc(x   *   y);  
  ::memset((void*)m_data,   NULL,   (x   *   y   *   sizeof(_Tx)));  
  }  
   
   
  void   Release()  
  {  
  if   (IS_VALID(m_data))  
  {  
  _Alloc<_Tx>::Free(m_data);  
  }  
  }  
   
   
   
  inline   _Tx&   Get(unsigned   int   x,   unsigned   int   y)  
  {  
  return   m_data[x   *   _col   +   y];  
  }  
   
   
  inline   _Tx*   operator[](int   x)  
  {  
  return   (_Tx*)(m_data   +   (x   *   _col));  
  }  
   
  private:  
  unsigned   int   _row;  
  unsigned   int   _col;  
  value_array   m_data;  
  };  
   
   
   
   
  _EVEREST_END_  
  #endifTop

8 楼SammyLan((基础决定你能走多远)--英语菜才是真的菜)回复于 2005-08-24 13:13:09 得分 0

二维动态数组的创建:  
  int   h,l;  
  cin>>h;  
  cin>>l;  
  int   ver**=new   int   *[h];  
  for(int   i=0;<h;++i)  
        ver[i]=new   int[l];Top

9 楼lyclowlevel(蓬蒿人)回复于 2005-08-24 13:15:19 得分 0

第二问题:int(*pArray)[3]=a;Top

10 楼ratzip(小小)回复于 2005-08-25 11:27:59 得分 5

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

11 楼monk188(和尚)回复于 2005-08-28 13:13:59 得分 0

谢谢给位前辈!Top

相关问题

  • VC中如何进行二维数组动态生成?
  • 怎样动态的生成二维字符串数组?
  • 呵呵,怎样生成动态的二维数组呀???????
  • 动态生成的二维数组赋值问题!
  • C++中二维数组不能动态生成么?
  • 动态二维数组?
  • 菜鸟发问:如何在VC生成动态float型二维数组
  • 如何在VC环境下生成一个二维float型动态数组?
  • 数组的动态生成
  • 如何实现动态二维数组?

关键词

  • c++
  • 指针
  • vector
  • null
  • 数组
  • 二维
  • dim
  • 生成
  • tx
  • 动态

得分解答快速导航

  • 帖主:whg1016
  • sunman1982
  • ratzip

相关链接

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

广告也精彩

反馈

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