我想初始化一个n*n方阵,以便稍后通过引用将其传递给另一个函数。但它甚至不能编译。我什么都试过了,请帮帮我。
#include<stdlib.h>
int main()
{
int i, j, n = 3;
float **a;
a = malloc(n * sizeof (float **));//Here I try to create the n pointers to pointer to float for the rows
for(i = 1;i <= n;i++){
a[i] = malloc(n * sizeof(float *)); //Here I try to create the n * n pointers to float for the columns
for(j = 1;j <= n;j++)
*(*(a + i - 1) + j - 1) = malloc(sizeof(float)); //Here I try to free the space for the elements
return 0;
}
你需要这样声明:
float **a;
a = malloc(n * sizeof (float *)); // rows
for(i = 0;i < n;i++){
a[i] = malloc(n * sizeof(float)); // cols
}
您的代码显示的内容与您的注释所建议的内容不同。
这里我尝试创建n * n个指针来浮动
列
通常,一个二维float"数组"有N
x N
浮点数,而不是N
x N
指向float的指针。你正在制作一个三维"数组",其中最里面的维度是1。
你也在你的sizeof
表达式中使用了错误的类型,所以你malloc
的内存量是错误的。
请澄清是否一个二维的"数组"是你想要的,或者如果你真的需要额外的间接级别在你的代码。(之后我会更新我的答案)。
(NB。我用引号括"数组"是因为我们讨论的不是真正的多维数组;它实际上是指向float类型数组第一个元素的指针数组(或者在3d情况下,指向指向float类型数组的指针数组)。