C++怎样使用变量定义二维数组??

来源:百度知道 编辑:UC知道 时间:2024/05/09 16:12:25
cin>>a>>b
float tt[a][b]肯定是错的
请问该怎么定义啊
好像用new语句可以 具体怎么弄啊??

float **tt = new float*[a];
for (int i=0; i<a; ++i) tt[i] = new float[b];

to goldenhawking : 这样内存确实不是连续的,不过一般都无所谓。 下标当然可以是变量,要不还费这个劲干啥。 至于你说的前一个方法算不上是二维数组, 后一个方法也不是连续内存,而且这么用vector麻烦很多

to wwww998888 : 这种变长数组是比较新的语法特性,多数编译器根本不支持。

楼上的方法分配的数组和静态的 float tt[a][b]的内存排布不一致,且数组下标无法为变量
正确方法:
cin<<a<<b;
size_t nSize = a*b*sizeof(float);
char * pBuf = new char [nSize];
float * pF = (float *) pBuf;
而后通过
pF[i*a+j]访问元素。

动态二维数组需要类模拟.
可以使用vector类型嵌套,或者使用map,提供几种结构

std::map<T1,std::vector<T2>>,好处,比如
std::map<std::string,std::vector<float>> m_array;
可以用
m_array["Hello"][4] = 5.5;
来访问。
需要注意的是,这样访问前要注意向vector插入空元素。

1.定义m*m的数组。

int m,**p;
p=new int*[m];

2.定义n*m的数组

int n;

int (*p)[2] = new int [n][2];

//此处的2不能是变量

3.定义n*m的二维数组

float **tt = new float*