如何在C中完成使用指针算术而不是数组下标的函数?

时间:2016-10-27 03:30:41

标签: c arrays pointers

我正在努力解决我的代码中的特定部分,我似乎格式错误。这段代码来自我的编程书,空白的部分周围有一个'$'。但是,有两个我似乎无法弄清楚的空白。我目前的代码是:

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

我在这些空白中尝试了几件事,似乎我一直在犯错误。我不完全理解数组/指针的情况。我填的空白,(包裹在$$$),我觉得是对的,但请随意仔细检查我。我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这利用了一个事实:数组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;
}