我正在与我的代码中似乎格式错误的特定部分进行斗争。这段代码取自我的编程书,空白部分周围有一个“$”。然而,有两个空白我似乎想不出来。我现在的代码是:

int sum_two_dimensional(const int a[][LEN], int n)
{
  int i,j, sum = 0;
  for(i=0, i<n; i++)
     for(j = 0; j< LEN; j++)
       sum+=a[i][j];
  return sum;
}

int sum_two_dimensional_array(const in a[][LEN], int n)
{
  int *p, sum = 0;

  for(p= a[0]; p < a[0] ______; p++)
      sum += ________;                     //my guess is a[p][sum];
  return sum;
}

我在这些空白处尝试了好几件事,似乎总是出错。我不完全理解数组/指针的情况。我填的空白处(用$$$包装),我觉得是对的,但可以再检查一遍。我很感激你的帮助。

最佳答案

这利用了这样一个事实:数组a[N][M]与一维数组a[N*M]使用相同的内存
因此,您可以“安全地”迭代a[0]“超出界限”,而不触发索引a[0][N*M-1]之前的内存异常

int sum_two_dimensional_array( int a[][LEN], int n)
{
  int *p, sum = 0;

  for(p= a[0]; p < a[0]+n*LEN; p++)
      sum += *p;
  return sum;
}

09-30 16:58
查看更多