我想初始化一个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;
}
答案 0 :(得分:2)
你需要这样声明:
float **a;
a = malloc(n * sizeof (float *)); // rows
for(i = 0;i < n;i++){
a[i] = malloc(n * sizeof(float)); // cols
}
答案 1 :(得分:0)
您的代码显示的内容与您的评论建议您尝试的内容有所不同。
这里我尝试为列
创建浮动的n * n指针
通常,float的2-D“数组”有N
x N
个浮点数 - 而不是N
x N
浮点数指针。你正在制作一个三维“数组”,其中最里面的维度是1.
此外,您在sizeof
表达式中使用了错误的类型,因此malloc
内存量不正确。
请澄清一个2-D“数组”是否是您想要的,或者您是否确实需要代码中额外的间接级别。 (之后我会更新我的答案)。
(NB。我在引号中说“数组”,因为我们不是在谈论一个真正的多维数组;它实际上是一个指向浮点数组的第一个元素的指针数组(或者在三维情况下) ,指向一个指向浮点数的指针数组。