Can';t在C中修改函数中未知大小的2D数组

Can';t在C中修改函数中未知大小的2D数组,c,function,multidimensional-array,parameter-passing,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语言,只是不知道如何在函数中修改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\u矩阵
函数?
为什么我不能在我的矩阵中写入

我希望使用尽可能少的“高级”概念和功能


提前感谢=)

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

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);
}
void init_矩阵(大小x,大小y,整数矩阵[x][y])
{
对于(尺寸i=0;i
函数
init_matrix()
将维度作为参数,然后是数组(这个顺序在这里很重要)。“双循环”是一款经典的“2D内存区域”,就像我们的阵列一样。 (请注意,您可能会忘记第一个维度

void init_矩阵(大小x,大小y,整数矩阵[][y])


也适用)

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

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);
}
void init_矩阵(大小x,大小y,整数矩阵[x][y])
{
对于(尺寸i=0;i
函数
init_matrix()
将维度作为参数,然后是数组(这个顺序在这里很重要)。“双循环”是一款经典的“2D内存区域”,就像我们的阵列一样。 (请注意,您可能会忘记第一个维度

void init_矩阵(大小x,大小y,整数矩阵[][y])


同样有效)

您必须在编译器中列出
void init_矩阵(int**M)
init_矩阵(M,3)--这张图片怎么了?“寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题说明的问题对其他读者没有用。请参阅:。”您必须向编译器列出
void init_矩阵(int**M)
init_矩阵(M,3)--这张图片怎么了?寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题说明的问题对其他读者没有用。请参阅: