怎样动态创建二维数组并初始化?c++ 【追加悬赏!】

这个是代码一部分:
void get_v(const int m,const int n,float **p)//这里传入了一个指向二维数组指针的指针(假设这个二维数组名为Base)
{
float* t=new float[m*n];//为了初始化新的二维数组a[m][n]我动态创建了一维数组t[m*n],大家都知道是不能直接声明一个a[m][n]的

for(int i=0;i<m;i++) //初始化
for(int j=0;j<n;j++){
a[m][n]=*( (float*)p+n*i+j );//大家看到了,我在这里想要初始化一个新的数组a,但是这个是二维数组,需要由刚才那个一维数组t[n*m]转换过来,但是我根本就无法声明一个新的二维数组a[m][n],这里就是问题所在了,希望大家予以解决,谢谢!
p++;
}
...............
}

我貌似没有明白a和t是什么关系?我假设你说的a和t是同一个东西

我尝试帮你解决:
void get_v(const int m,const int n,float **p)//这里传入了一个指向二维数组指针的指针(假设这个二维数组名为Base)
{
float** a=new float*[n];//为了得到a[m][n],先动态创建了一维数组a[n]

for(int i = 0; i<n; i++)
{
a[i]=new float[m];//这样初始话每一个数组
}

for(int i=0;i<m;i++) //这个时候就可以按照你的方式来了,初始化
for(int j=0;j<n;j++){
a[m][n]=*( (float*)p+n*i+j );//这里就不用转换了,直接可以使用,但有一点要注意,就是再释放a的时候要采取上面相反的措施,不仅仅是delete[] a就能搞定的。
p++;
}
...............
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-16
你所说的“这里传入了一个指向二维数组指针的指针”,但是我看你用的是“float **p”,这是指向 2 维数组指针的指针吗?这是指向 1 维数组指针的指针吧。估计你分配失败的原因是,所谓分配,就是分配一段存储空间,分配后将这段存储空间的首地址赋给传进来的参数变量 p,而你用的是 2 级指针,也就是说,函数内部的赋值,在函数调用结束后,这个值不会保留,你懂吗?就跟你传给函数一个 int i,那么这个 i 你在函数内部无论怎么改,一出函数,它根本没变。所以,你必须使用 3 级指针或者 C++ 中的“引用”。我给你写了一个函数,我用的是引用,在 VC++ 6.0 上运行结果正确,你把他复制粘贴到 VC 里运行试试,不会再问我,代码如下:

#include <malloc.h>
#include <stdio.h>
#include <windows.h>

typedef float DATA_TYPE; // 在本例中为 float 类型

// 函数功能:为 DATA_TYPE 类型的 2 级指针变量分配存储空间,分配后可用二维数组的形式访问其元素'
// 参数:m 第 1 维大小,n 第 2 维大小,buf 一个 DATA_TYPE 类型的 2 级指针变量
// 返回值:若函数成功分配,返回 TRUE;否则,返回 FALSE
// 说明:函数在内部为 buf 分配存储空间,调用者负责释放本函数所分配的存储空间
BOOL Malloc( int m, int n, DATA_TYPE **&buf )
{
// 为第 1 维分配存储空间
buf = ( DATA_TYPE ** )malloc( m * sizeof( DATA_TYPE * ) );
if ( NULL == buf )
{
return FALSE;
}

// 为第 2 维分配存储空间
for ( int i = 0; i < m; i++ )
{
buf[i] = ( DATA_TYPE * )malloc( n * sizeof( DATA_TYPE ) );
if ( NULL == buf[i] )
{
return FALSE;
}
}

return TRUE;
}

int main( int argc, char *argv[ ], char *envp[ ] )
{
DATA_TYPE **buf = NULL;
int m = 4;
int n = 3;
Malloc( m, n, buf );

for ( int i = 0; i < m; i++ )
{
for ( int j = 0; j < n; j++ )
{
buf[i][j] = 0; // 这里我将所有元素赋值为 0
}
}

for ( i = 0; i < m; i++ )
{
for ( int j = 0; j < n; j++ )
{
printf( "%f ", buf[i][j] );
}
putchar( '\n' );
}

return 0;
}
相似回答