如何动态生成二维数组
各位:
大家好,在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




