double** Make2DDoubleArray(int arraySizeX, int arraySizeY) {
double** theArray;
theArray = (double**) malloc(arraySizeX*sizeof(double*));
for (int i = 0; i < arraySizeX; i++)
{
theArray[i] = &(malloc(arraySizeY*sizeof(double)));
memset(&(theArray[i]), 0, arraySizeY*sizeof(double));
}
return theArray;
}
我需要用C中的malloc
制作一个二维数组。我使用了上面的方法。
当我使用Matrix
访问返回的数组(让我们称之为Matrix[1,2] = 2.0;
)时会抛出错误:
无法在作业
中将'double'转换为'double *'
但我不明白为什么Matrix[1,2]
是指针而不是值?
Matrix
是指针的指针,Matrix[i]
是指向double
列表的指针,因此Matrix[i,j]
应该是double
而不是double *
1}}!
答案 0 :(得分:3)
Matrix[i, j]
是Matrix
位于索引i, j
的项目,它是值i
和j
上的逗号运算符的结果,只是Matrix[j]
。你的意思可能是Matrix[i][j]
。
除此之外:
不要转换malloc
的返回值:
double** theArray = malloc(arraySizeX * sizeof(double));
您使用的是错误的sizeof
;它是sizeof(double*)
:
double** theArray = malloc(arraySizeX * sizeof(double*));
这没有任何意义;放下&
:
theArray[i] = &(malloc(arraySizeY*sizeof(double)));
这是错的;再次删除&
:
memset(&(theArray[i]), 0, arraySizeY*sizeof(double));
答案 1 :(得分:2)
这些行错了:
theArray[i] = &(malloc(arraySizeY*sizeof(double)));
memset(&(theArray[i]), 0, arraySizeY*sizeof(double));
我很惊讶编译器没有抱怨在第一次通话中取一个临时地址。
你需要:
theArray[i] = malloc(arraySizeY*sizeof(double));
// ^^ Drop the &
memset(theArray[i], 0, arraySizeY*sizeof(double));
// ^^ Drop the &