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