int print(int **a, int m, int n)
{
int i, j, sum = 0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
sum = sum + *((a + i*n) + j);
}
}
return sum;
}
我得到了一个垃圾值而不是数组元素的总和。当我输入为
sum = sum + (int )*((a + i*n) + m));
我得到了正确答案。这是为什么?但是这种方法不适用于修改数组元素。我怎样才能做到这一点? 请查看此链接以供参考。 http://ideone.com/VRVAxW
答案 0 :(得分:1)
尝试
sum = sum + *( *(a + i ) + j));
考虑到可以为声明为
的数组调用该函数int * a[m];
或声明为
的指针int **a;
否则,您应该按照以下方式定义函数,前提是您的编译器支持可变长度数组
int print( int m, int n, int a[][n] )
{
int i, j, sum = 0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
sum = sum + *( *(a + i ) + j );
}
}
return sum;
}
至于这个表达
(int )*((a + i*n) + m)
相当于
(int )*( a + i*n + m )
然后无论如何都是错的。