在函数

时间:2017-12-15 10:42:59

标签: c arrays function pass-by-reference

如果我将函数内容放入主块,下面的代码可以很好地工作,但是这里的函数完全失败了。我目前得到的一个下标值既不是数组也不是指针,也不是矢量'错误。我也得到了通过参数1和4来累积'来自不兼容的指针类型'错误。

void accumulate( double sum[], int ypos[], int xpos[], int vals[], int numvals )
{
    for(int i=0 ; i<numvals ; i++) /// start looping over indices
    {
       sum[ypos[i]][xpos[i]] += vals[i];
    }
}



int main()
{
    int xpos[2]    = {0,1};
    int ypos[2]    = {0,1};
    double vals[2] = {1.01,7};
    int numvals    = 2;
    int size       = 6;
    double sum[size][size];

    for(int i=0; i<size ;i++)
    {
        for(int j=0; j<size ; j++)
            {
            sum[i][j] = 0; // make zeros
            }
    }

    accumulate(sum,ypos,xpos,vals,numvals); // doesn't work

    for(int i=0; i<size ;i++)
    {
        for(int j=0; j<size ; j++)
            {
            printf("%f ", sum[i][j]);
            }
        printf("\n");
    }
}

1 个答案:

答案 0 :(得分:0)

传递给衰减为T (*)[COLS]的函数的2d数组。或者你也可以写

void func( int col, int arr[][col]);

所以你会写

void accumulate( double sum[][size], int ypos[], int xpos[], int vals[], int numvals )
{
    ...
}

此外,您应该知道ypos[i]xpos[i]应该在数组size的限制范围内,这样您就不会遇到未定义的行为。