二维数组和指针运算



我正试图将一个二维数组复制到另一个二维数组。由于名称(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) = %.1fn", ctr, *(pAry + ctr));  //this works fine 
{
*(newAry + ctr) = *(pAry + ctr);   //this is where I receive error
}
return;
}

…提前谢谢。

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

对于这种低级别的数据复制,通常使用memcpy。除此之外,您可以从double* pNewAry = &newAry[0][0]或其他类似的开始,以便将2d数组测试为双精度数的线性序列。