我貌似没有明白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
a[i]=new float[m];//这样初始话每一个数组
}
for(int i=0;i
p++;
}
...............
}
你所说的“这里传入了一个指向二维数组指针的指针”,但是我看你用的是“float **p”,这是指向 2 维数组指针的指针吗?这是指向 1 维数组指针的指针吧。估计你分配失败的原因是,所谓分配,就是分配一段存储空间,分配后将这段存储空间的首地址赋给传进来的参数变量 p,而你用的是 2 级指针,也就是说,函数内部的赋值,在函数调用结束后,这个值不会保留,你懂吗?就跟你传给函数一个 int i,那么这个 i 你在函数内部无论怎么改,一出函数,它根本没变。所以,你必须使用 3 级指针或者 C++ 中的“引用”。我给你写了一个函数,我用的是引用,在 VC++ 6.0 上运行结果正确,你把他复制粘贴到 VC 里运行试试,不会再问我,代码如下:
#include
#include
#include
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;
}