为什么全局数组和局部数组两个结果没有区别? [关闭]

问题描述 投票:0回答:1

我在

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()
函数中。

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

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

c++ arrays global local
1个回答
0
投票

在您问题的原始版本中,您留在全局数组中,但将本地数组添加到

main()
。局部数组 shadow 只有在
main()
内部使用时才使用全局数组,而
mask()
label()
仍然使用全局数组。在你的问题的那个版本中,两个代码都有相同的结果,因为只有全局数组被用于任何事情,本地数组根本没有被使用。

然后你编辑了你的问题以删除全局数组,现在该代码无法编译,正如预期的那样,因为

mask()
label()
正在尝试使用尚未声明的数组。


请注意,在您的问题的所有版本中,两个代码都无法编译,因为

main()
必须返回
int
而不是
void
,并且
init()
在声明之前被调用。

© www.soinside.com 2019 - 2024. All rights reserved.