二级指针的有关问题

二级指针的问题
要生成Hadamard矩阵,1阶矩阵为1,2阶矩阵为{1 1;1 -1},4阶矩阵为[1 1 1 1;1 -1 1 -1;1 1 -1 -1;1 -1 -1 1],8阶之后的矩阵就是把前一阶的矩阵复制在右上、左下,以及前一阶矩阵的相反数放在右下角,
在函数中又不想指定二维数组中任意一维的大小,想在主函数中进行维数大小的定义(因为这个维数大小是有变化的,2,4,8,16等),所以我用了一个二级指针,可是运行之后得到的结果不是我想要的啊,如果用行指针的话也要求要指出列数的大小,有什么方法,可以解决呢!
代码:
#define N 3 //要生成的S矩阵的阶数
float H[N+1][N+1];//用来存放Hadamard矩阵
//这个函数用来打印Matrix二维数组的元素,m为行数,n为列数,这三个参数都是形式参数
void PrintMatrix(float **Matrix,int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%f ",*((float *)Matrix+n*i+j)); //因为这里用了二级指针,所以Matrix[i][j]转变为:*((int*)array + n*i + j)来访问

}
printf("\n");
}
}


/生成n阶的Hadamard矩阵,用形参HX来存放Hadamard矩阵的元素
void CreateHadamard(float **HX,int n)

{
if(1==n)//为一阶时退出
{
  *((float *)HX)=1;
  // printf("------%d阶Hadamard矩阵-----\n",n);
//PrintMatrix(HX,n,n);
return;
}
  else
{
int iPreStep=n/2; //n阶的前一个等级的除数
int i,j;

  //递归调用生成阶的Hadamard矩阵
CreateHadamard(HX,iPreStep);

//把前面iPreStep 阶方阵值 复制到左下位置
for (i= 0;i<iPreStep; i++ )
{
for (j=0;j<iPreStep; j++)
{
// HX[iPreStep+i][j] =HX[i][j];
*((float *)HX+n*(iPreStep+i)+j)=*((float *)HX+n*i+j);
}
}

//把前面iPreStep 阶方阵值 复制到右上位置
for (i= 0;i<iPreStep; i++ )
{
for (j=0;j<iPreStep; j++)
{
//HX[i][j+iPreStep] =HX[i][j];
*((float *)HX+n*i+(j+iPreStep))=*((float *)HX+n*i+j);
}
}

//把前面iPreStep 阶方阵值 复制到右下位置
for (i= 0;i<iPreStep; i++ )
{
for (j=0;j<iPreStep; j++)
{
// HX[iPreStep+i][j+iPreStep] = -HX[i][j];
*((float *)HX+n*(iPreStep+i)+(j+iPreStep))=-(*((float *)HX+n*i+j));
}
}
//printf("------%d阶Hadamard矩阵-----\n",n);
//PrintMatrix(HX,n,n);
}
}

void main()
{
CreateHadamard((float **)H,N+1);
PrintMatrix((float **)H,N+1,N+1);

}


 
运行后结果,不对啊
1 1 1 1
0 0 0 0
1 1 -1 -1
0 0 0 0 
这个结果不对啊
应该是
1 1 1 1 
1 -1 1 -1
1 1 -1 -1
1 -1 -1 1
请大神啊

------解决方案--------------------
printf("%f ",*((float *)Matrix+n*i+j)); //因为这里用了二级指针,所以Matrix[i][j]转变为:*((int*)array + n*i + j)来访问

反正Matrix二维指针所指的数据是符合二维数组结构的,那么,直接用Matrix[i][j]的方式来访问就是了,不必搞那么复杂的变换。
------解决方案--------------------
探讨
printf("%f ",*((float *)Matrix+n*i+j)); //因为这里用了二级指针,所以Matrix[i][j]转变为:*((int*)array + n*i + j)来访问

反正Matrix二维指针所指的数据是符合二维数组结构的,那么,直接用Matrix[i][j]的方式来访问就是了,不必搞那么复杂的变换。