【问题标题】:Pointer to Multidimensional Array in C?C语言中指向多维​​数组的指针?
【发布时间】:2015-02-05 18:12:58
【问题描述】:

C 中指向多维​​数组的指针能否简单地写成:

double *array;

array是一个 n × n 矩阵?

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

或者有没有双指针之类的东西?

【问题讨论】:

  • 这样的东西 ** ,但它与 [][] 完全不同。
  • 您必须声明为array[rows * columns](或为其分配内存)并按[row * columns + col]索引
  • 指针是一个指针。指向 C 中任何内容的指针以相同的方式表示,因此如果您愿意,可以强制转换它们。但强烈不推荐。多维数组通常表示为指向其他指针的指针。

标签: c arrays pointers


【解决方案1】:

C 中指向多维​​数组的指针能否简单地写成:

double *array;

是的。

假设你有M x N 数组。您可以使用:

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)];
}

【讨论】:

【解决方案2】:

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]

【讨论】:

    【解决方案3】:

    要创建指向多维数组array[i][j] 的指针,其中 i 是行数,j 是列数,您可以这样做 double (*ptr)[j],它表示 ptr 是指向 j 元素的双数组的指针。那么你可以分配ptr=array;

    【讨论】:

      【解决方案4】:

      C 中指向多维​​数组的指针能否简单地写成:

      double *array;
      

      可能是在将数组交给函数时用来表示数组的东西!然后,C 数组仅由指向其第一个元素的指针表示。这些元素的内部组织方式取决于您;确保您也不使用实际上在数组之外的索引。

      或者有没有双指针之类的东西?

      当然; double ***ndim_array 完全有效。但是,您也可以使用像double [][][] 这样的多维数组。

      (感谢 cmets 的所有贡献者!)

      【讨论】:

      • @EOF:是的,你当然是对的“指针不是数组”;我认为我对double[][] 实际上必须被读作“数组数组”是非常正确的,即。指向指针的指针。
      • 没有。它是一个多维数组。他们真的,真的是不同的。
      • @MarcusMüller:不,你搞错了。数组不是指针,数组数组也不是指向指针的指针。查看常见问题解答:c-faq.com/aryptr/index.html
      • @ThomasPadron-McCarthy:FAQ 有一个很好的解释!不过请注意,我故意使用了动词represent。好的,尽管如此,您确实让我了解了多维数组,因此我将其从答案中删除。多谢你们!顺便提一句;如果可以的话,绝对欢迎您在这里更正我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多