c++ - 为什么这些数组在本地时起作用,而在全局时却不起作用?

标签 c++ arrays

我一般都不熟悉C++ /编程,所以我一直在尝试看看我能做什么和不能做什么,并且遇到了似乎应该起作用的事情,但是没有。出于某种原因,当我将两个数组放置在任何函数之外以使其公开时,它们就像公开一样工作。
当我将它们都放置在主函数中时,代码可以正常工作,但是我也希望能够将它们用于其他函数。我编写它的方式是否有问题,还是需要将两个数组都放入我希望它们工作的每个函数中?
编辑:预期的行为是输入数字1-9并接收字母ai,然后在另一行上将字母更改为X。将数组放置在我希望它们使用的函数之外时,字母ai都不是如图所示,它会跳过该行并输出X。当放置在内部时,例如,如果我键入4,则“d”将输出,然后在下一行输出“X”。

#include <iostream>

using namespace std;

char pos[3][3] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'};
char pos2[] = {pos[3][3]};
char player = 'X';

int main()
{
    int a;

    for (int i = 0; true; i++)
    {
    cin >> a;
    cout << pos2[a] << endl;

    pos2[a] = player;

    cout << pos2[a] << endl;
    }
    return 0;
}

最佳答案

您的pos2数组只有一个元素。访问pos2[0]以外的任何元素都是未定义行为。这意味着您的程序可能会崩溃,或者它似乎可以正常运行。
由于您尝试访问数组中的9个元素,因此应将其声明为

char pos2[9] = {pos[3][3]};
最好使用一些命名常量而不是硬编码9。这将创建一个9元素数组,第一个元素初始化为字符'i',其他8设置为0。
由于您没有对输入进行任何错误检查,因此,如果用户未在[0..8]范围内输入数字,则很可能出现不良行为。 (pos[9]超出范围。)要将其调整到[1..9]范围,您需要在索引编制时减去1:
cout << pos2[a - 1] << endl;
// (also other references to `pos2[a]`)
或将a减1,然后再用作下标。

关于c++ - 为什么这些数组在本地时起作用,而在全局时却不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64235420/

相关文章:

javascript - 从 Node 中解析的 csv 文件构建对象数组

c++ - 字符串和 unordered_map 运行缓慢

c++ - decltype 不解析嵌套 vector 。如何使用嵌套 vector 的模板?

c++ - 无法在 VS10 中订购 weak_ptr

java - 你如何创建一个大数组?

ios - 如何过滤二维数组

arrays - 如何在不知道c中大小的情况下遍历数组

python - 计算嵌套列表中的唯一元组

c# - C++/命令行界面 : Implementing an abstract C# class that implements INotifyPropertyChanged results in C++ compiler error C3766

c++ - Having trouble importing function from C++ dll 错误 LNK 2019