C++如何动态创建二维数组?

用new操作产生指向一个9行8列的二维float型数组的指针cp

float(*cp)[9][8];

cp=new float[8][9][8];//为什么有三个下标?最左边多出的[8]有什么用?

哪位高手知道的,请告诉我,谢谢!

float(*cp)[9][8]; //

cp=new float[8][9][8];//

第一条语句是申明数组指针,即cp指向一个float型的数组。
第二条语句是开辟了一个【8】【9】【8】的三位数组空间,将首地址赋给指针cp ,再给cp的操作也就是对float[8][9][8]这个地址空间操作。多出的一个8只是将二维数组[9][8]的空间扩大了8被,用指针操作其实是一样的,比如要取第20个元素就直接 float f = *(cp+20-1)

下面是网上找的比较详细的解释,应该比较明了了

int (*p)[10];
定义了一个数组指针,这个指针与一般的指针没有什么区别,仅仅是这个指针指向一个数组。这里我们把数组作为了基本的元素处理。也就是说,将整个数组作为一种类型,而数组名就是这个类型的一个具体变量。例如:
int a[10];
一个数组类型,形状就是这样:int [10];a就是新定义的一个变量。
int b[3];
一个数组类型,形状就是这样:int [3];b就是新定义的一个变量。
因为这两个类型形状不一样,因此是两个不同的类型,因此a,b就是不同类型的变量。这就好比int a和double b :a和b不一样。不知道大家是否已经对数组类型有了基本的印象?
那么把数组名作为该数组类型的一个具体变量,我们就可以定义指向这个变量的指针,即数组指针。
对于数组类型:int [10],我们可以定义一个指针,int (*p) [10].注意这里一定要加上小括弧。否则就会变成了指针数组。定义了指针之后,我们可以对该指针赋值,如p=&a;如果定义了一个二维数组,int c[3][10]。我们可以认为定义了一个一维的数组,这个数组有三个int[10]的元素。因此和一般的数组一样,我们可以将该数组名赋给指针,其实也就是第一个元素的地址付给指针。即: p=c;或者p=&c[0]。其余情况以此类推。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-07
一维数组是指针,可将二维数组看作是指针的指针:
每一行是一个一维数组,而列是指向行的指针,在动态创建时,先分配指向行的指针空间,再循环维每一行申请空间。
#include <iostream>
using namespace std;
int main()
{
//[3]4] //三行四列的二维数组
int x,y;
int i,n,k;
x=3;
y=4;
int **p;
p = new int*[x]; //行 //申请行的空间
//每行的列申请空间
for(i=0; i<x;i++)
{
p[i] = new int [y];
}

//赋值,
k=0;
for(i=0;i<x;i++)
{
for(n=0;n<y;n++)
{
p[i][n] = k;
k++;
}
}

//显示刚才的赋值
for(i=0;i<x;i++)
{
for(n=0;n<y;n++)
{
cout << p[i][n] << "\t";
}
cout << endl;
}

//删除刚才申请的内存
for(i=0;i<x;i++)
{
delete [] p[i];
}
delete [] p;
return 0;
第2个回答  2008-08-02
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;
}
第3个回答  2008-08-02
int**a=new int *[len1+1];
for(int i=0;i<=len1;i++)
a[i]=new int [len2+1];
第4个回答  2008-08-02
直接用new语句就可以了
相似回答