c++ 为什么全局数组和局部数组的两个结果没有区别?

mrwjdhj3  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(134)

我在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()函数中。
我想我误解了全局和局部的概念,所以我在这个网站上搜索了一些有用的信息和问题,但是没有一个能帮助我解决这个问题。
你能解释一下为什么这个程序运行良好没有任何问题吗?

js81xvg6

js81xvg61#

在你的问题的原始版本中,你保留了全局数组,但在main()中添加了本地数组。只有在main()本身内部使用时,本地数组 * 隐藏 * 全局数组,而mask()label()仍然使用全局数组。在你的问题的原始版本中,两个代码的结果相同,因为只有全局数组被用于任何事情,根本不使用本地阵列。
然后,您编辑了您的问题以删除全局数组,现在是that code fails to compile,正如预期的那样,因为mask()label()正在尝试使用尚未声明的数组。
请注意,在您的问题的所有版本中,这两个代码都无法编译,因为main()必须返回int而不是void,并且init()在声明之前就被调用了。

相关问题