无法在C中的功能中修改未知大小的2D阵列

时间:2017-09-28 23:26:46

标签: c function multidimensional-array parameter-passing

我是C的新手,我无法弄清楚如何在函数中修改2D数组。 这是我尝试过的代码:

void init_matrix(int **M) {
    M[0][0] = 1;
}

int main(void) {    
    int M[3][3];    
    init_matrix(M, 3);

    return 0;
}

(请注意,此代码是自愿删除的,以便专注于此问题,我需要我的函数才能处理全局未知大小的数组(尽管它可能是函数的参数) )

当我尝试运行它时,它就会卡住......调试器说这是在这个内存插槽中写入权限的问题。

您如何以C语言编写init_matrix函数? 为什么我不能在我的矩阵中写字?

我想用尽可能少的"高级"概念和功能尽可能。

提前致谢=)

1 个答案:

答案 0 :(得分:2)

数组不是指针。将函数作为函数参数传递时,需要给出数组的尺寸。

void    init_matrix(size_t x, size_t y, int matrix[x][y])
{
    for (size_t i = 0 ; i < x ; ++i)
    {
        for (size_t j = 0 ; j < y ; ++j)
            matrix[i][j] = 1;
    }
}

int     main(void)
{
    int matrix[5][3];

    init_matrix(5, 3, matrix);

    return (0);
}

函数init_matrix()将维度作为参数,然后是数组(这个顺序在这里很重要)。 “双循环”是像我们的阵列一样运行“2D存储区”的经典之作。 (请注意,您可以忘记第一个维度,

void init_matrix(size_t x, size_t y, int matrix[][y])

也有效)