【发布时间】:2020-09-30 19:47:35
【问题描述】:
我正在学习 C,我很困惑为什么函数中的主要变化中的矩阵会发生变化。我假设矩阵在函数 change 中作为 ma[10][10] 传递,并且矩阵 m 不应该改变,因为我在 main 中声明了它,对吗?有人可以解释在这种情况下发生了什么吗?我该如何解决?
谢谢帮助
void change(int ma[2][3]){
int l, c;
for(l=0; l<2; l++){
for(c=0; c<3; c++){
ma[l][c]=1;
}
}
}
int main()
{
int m[2][3], l, c;
for(l=0; l<2; l++){
for(c=0; c<3; c++){
m[l][c]=0;
}
}
change(m);
for(l=0; l<2; l++){
for(c=0; c<3; c++){
printf("%d", m[l][c]);
}
printf("\n");
}
return 0;
}
我期待看到这个:
000
000
我得到了什么:
111
111
【问题讨论】:
-
函数不能有数组参数。如果您尝试制作一个,它会自动替换为指针;你的函数相当于
void change(int (*ma)[3])。 -
我想真正的问题是为什么你期望一个名为
changenot 的函数来改变传递的数组。这有什么意义?你想“修复”什么,你想要一个不改变数组的函数吗?这样做有什么好处?
标签: c arrays function parameter-passing