指向C中多维数组的指针?

指向C中多维数组的指针?,c,arrays,pointers,C,Arrays,Pointers,在C中,指向多维数组的指针可以简单地写为: double *array; double *array; 其中,数组是n×n矩阵 然后我可以通过array[I][j]访问第I行、第j列中的元素吗 还是有双指针之类的东西 在C中,指向多维数组的指针可以简单地写为: double *array; double *array; 对 假设您有mxn数组。您可以使用: double* array = malloc(M*N*sizeof(*array)); 然后,您可以通过以下方式访问元素: siz

在C中,指向多维数组的指针可以简单地写为:

double *array;
double *array;
其中,
数组
是n×n矩阵

然后我可以通过
array[I][j]
访问第
I
行、第
j
列中的元素吗

还是有双指针之类的东西

在C中,指向多维数组的指针可以简单地写为:

double *array;
double *array;

假设您有
mxn
数组。您可以使用:

double* array = malloc(M*N*sizeof(*array));
然后,您可以通过以下方式访问元素:

size_t getArrayIndex(size_t m, size_t n, size_t M)
{
    return (m*M+n);
}

double getArrayElement(double* array, size_t m, size_t n, size_t M)
{
    return array[getArrayIndex(m, n, M)];
}
在C中,指向多维数组的指针可以简单地写为:

double *array;
double *array;
当把数组交给函数时,它可以用来表示数组!然后,C数组仅由指向其第一个元素的指针表示。这些元素的内部组织方式取决于您;确保不使用实际位于数组之外的索引

还是有双指针之类的东西

当然,<代码>双***ndim_数组完全有效。但是,您也可以使用多维数组,如
double[][]


(感谢评论中的所有贡献者!)

double*
是指向
double
的指针。它也是指向
double
数组元素的指针

要想做你想做的事:

double bla[23][42];          // array of arrays, type is double [23][42]
double (*p)[23][42] = &bla;  // pointer to an object of type double [23][42]

要使指针指向多维数组,可以执行
double(*ptr)[j]
,其中i是行数,j是列数,表示ptr是指向j元素的双数组的指针。然后您可以分配
ptr=array

有一种东西叫做
***
,但它与
[]][]
完全不同。您必须声明为
数组[行*列]
(或分配内存),并通过
[行*列+列]索引
指针是指针。在C中,指向任何对象的指针都是以相同的方式表示的,因此,如果需要,可以强制转换它们。但强烈不建议这样做。多维数组通常表示为指向其他指针的指针。@EOF:是的,你们说的“指针不是数组”当然是对的;我认为我对double[][]
的理解是非常正确的,实际上我必须把它理解为“数组的数组”,即指向指针的指针。不。这是一个多维数组。他们真的,真的很不一样。@MarcusMüller:不,你搞错了。数组不是指针,数组数组也不是指向指针的指针。查看常见问题:@ThomasPadron McCarthy:该常见问题有一个很好的解释!不过,请注意,我故意使用了“表示”这个动词。好的,你已经了解了多维数组的事情,但是,事实上,我从我的答案中删除了这个。谢谢,伙计们!顺便提一下如果可以的话,欢迎您在这里更正我的答案。@user3746892看到这个问题了,虽然它是c++的,但答案可以帮助您更好地理解这个答案