指向C中多维数组的指针?
在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
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++的,但答案可以帮助您更好地理解这个答案