【问题标题】:two dimensional array and pointer arithmetic二维数组和指针算法
【发布时间】:2021-11-13 18:55:13
【问题描述】:

我正在尝试将二维数组复制到另一个二维数组。由于名称 (srcAry) 是源数组的第一个元素的地址,因此我能够在 for 循环中使用指针算法打印出源数组中的所有值。我使用行数乘以列数作为停止循环的条件。如果我尝试使用此方法将值分配给新数组,我会收到一条错误消息(错误:分配给具有数组类型的表达式)。这可以做到这一点还是我仅限于使用两个带有索引的嵌套for循环? ...

void copyAry(double *pAry, int numRows, int numCols)
{
    double newAry[numRows][numCols];
    int end = numRows * numCols;
    int ctr = 0;

    for( ; ctr < end; ctr++)

  //  printf("*(pAry + %d) = %.1f\n", ctr, *(pAry + ctr));  //this works fine 
     {
       *(newAry + ctr) = *(pAry + ctr);   //this is where I receive error
     }
    return;
}

... 提前致谢。

【问题讨论】:

  • 您是否需要用new, malloc或其他函数为newAry分配内存,或者定义double newAry[numRows][numCols];会在您的语言中自动分配内存?

标签: pointers math multidimensional-array


【解决方案1】:

我会假设newAry + ctr 的类型不是您的代码假设的double*,而是double*[numCols],即指向numCols 元素数组的指针。这也意味着您一次不会推进一个元素,而是numCols

通常您会使用memcpy 进行这种低级数据复制。除此之外,您可以从 double* pNewAry = &amp;newAry[0][0] 或类似的开始,以便将二维数组作为双精度的线性序列进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多