我是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
函数?
为什么我不能在我的矩阵中写字?
我想用尽可能少的"高级"概念和功能尽可能。
提前致谢=)
答案 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])
也有效)