修改传递给函数的2d数组

时间:2015-08-03 19:14:49

标签: c arrays

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

1 个答案:

答案 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 )

然后无论如何都是错的。