为什么在全局数组和局部数组之间的两个结果没有区别?



我在main()函数中将全局数组转换为局部数组来解决我的c++作业。我期望程序产生一个错误,但是它输出了相同的结果没有任何错误

这个问题的原因是什么?

这是第一个源代码:

#define DIM 9
int MaskA[DIM][DIM];
int LabelA[DIM][DIM];
inline int& mask(int x, int y) { return MaskA[y][x]; }
inline int& label(int x, int y) { return LabelA[y][x]; }
void main()
{
int total=5;
init(total);
}
void init(int total) {
for (int y = 0; y < DIM; y++)
for (int x = 0; x < DIM; x++) {
mask(x, y) = 9;
label(x, y) = 0;
}
}

然后,我把它改成这样:

#define DIM 9
inline int& mask(int x, int y) { return MaskA[y][x]; }
inline int& label(int x, int y) { return LabelA[y][x]; }
void main()
{
int MaskA[DIM][DIM];
int     LabelA[DIM][DIM];
int total=5;
init(total);
}
void init(int total) {
for (int y = 0; y < DIM; y++)
for (int x = 0; x < DIM; x++) {
mask(x, y) = 9;
label(x, y) = 0;
}
}

我期望当两个数组在main()函数中是局部时,mask()函数和label()函数不起作用,因为两个数组不在init()函数中。

我认为我对全局和局部的概念是错误的,所以我在这个网站上搜索了一些有用的信息和问题,但没有一个能帮助我解决这个问题。

你能解释一下为什么这个程序运行得很好,没有任何问题吗?

在您的问题的原始版本中,您离开了全局数组,但将本地数组添加到main()。局部数组只在main()内部使用时遮蔽全局数组,而mask()label()仍然使用全局数组。在你的问题的那个版本中,两个代码都有相同的结果,因为只有全局数组被用于任何事情,局部数组根本不被使用。

然后您编辑了您的问题以删除全局数组,现在代码无法编译,因为mask()label()正试图使用尚未声明的数组。


请注意,在您的问题的所有版本中,两个代码都无法编译,因为main()必须返回int而不是void,并且init()在声明之前被调用。

相关内容

  • 没有找到相关文章

最新更新