【发布时间】:2021-06-11 11:08:46
【问题描述】:
我有一个函数可以根据用户给定的维度创建一个新矩阵,它看起来像这样:
void matrix(n, m){
int mtx[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if ((j == 1 && i != 0 && i != n - 1) || (i == 1 && j != 0 && j < m - 3) ||
(i == n - 2 && j != 0 && j < m - 3) || (j == m - 4 && i != 0 && i != n - 1)) {
mtx[i][j] = 1;
printf("%d ", mtx[i][j]);
}
else {
mtx[i][j] = 0;
printf("%d ", mtx[i][j]);
}
}
printf("\n");
}
}
它输出类似这样的东西(以 13x13 尺寸为例):
0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 0 0 0 0 0 0 0 1 0 0 0
0 1 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
但如果我尝试在 main() 中做同样的事情,输出如下:
0 0 0 0 0 0 7602432 0 0 0 0 0 -13856
0 0 0 0 0 -2145891403 1 -1 0 0 0 0 0
-2144601408 1 -13360 0 1 0 64 0 0 0 -2145133264 1 -13168
0 -12816 0 0 0 0 0 231600 8 0 0 -13168 0
-12816 0 -2145990936 1 15 0 3 0 4206656 1 50 0 -2145996184
1 -13904 0 18 0 -2145970054 1 2 0 -2145145120 1 -2144661632 1
-2145988848 1 0 0 -2144002969 0 0 0 0 0 -2145996184 1 -13808
0 0 0 -2145968555 1 -2145969808 1 -13808 0 0 0 0 0
0 0 -2147184784 1 -2145147008 1 -2145968503 1 102 0 48 0 4202496
1 0 0 -2147184784 1 0 0 5624 0 -10624 0 -2145503066 1
-2145147008 1 0 0 0 0 -13168 0 -12816 0 0 0 0
0 -13312 0 -2145650929 1 0 0 -2145145672 1 4206712 1 -13416 0
0 0 688 0 13 0 4199690 1 13 1 13 0 -13360
这是我在 main 中用来输出这个矩阵的一段代码:
int mtx[t1][t2];
matrix(t1, t2);
for (int i = 0; i < t1; i++) {
for (int j = 0; j < t2; j++) {
printf("%d ", mtx[i][j]);
}
printf("\n");
}
我的目标是在 main 中定义的 mtx[t1][t2] 上存储正确的值。
感谢您的帮助!
【问题讨论】:
-
你从不设置
mtx中的值。 -
您有两个不同且截然不同且完全不相关的变量,名为
mtx。请花一些时间回到您的教科书并阅读有关 范围 的更多信息。 -
@dbush 你的意思是尺寸? (“t1”和“t2”)
-
matrix()函数内部的局部变量mtx与main()中的变量不一样。 -
@Tastefool 我的意思是
mtx没有以任何方式修改。正如其他cmets所说,main中的mtx和matrix中的mtx是两个不同的变量。