【问题标题】:c#: What happens exactly when I initialize an array of bools like thisc#:当我像这样初始化一个布尔数组时会发生什么
【发布时间】:2023-03-18 04:40:02
【问题描述】:

我进入 C# 并且有点困惑 about an example of the resource im learning from. 它关于 bool 数组的声明和初始化,我想知道在代码中的哪个点发生了什么:

    bool[][] myBools = new bool[2][];
    myBools[0] = new bool[2];
    myBools[1] = new bool[1];

    myBools[0][0] = true;
    //myBools[0][1] = false;
    myBools[1][0] = true;
    Console.WriteLine("myBools[0][0]: {0}, myBools[1][0]: {1}", myBools[0][0], myBools[1][0]);

我声明了一个未知大小的二维布尔数组 - 在同一行中,我用 2 个布尔数组初始化数组。

那一刻我在数组中有什么? C# 不允许读出值。 (我想我现在有一个 array_main 有 2 个包含未初始化的成员!bool arrays_members 这是正确的吗?所以一个包含 2 个成员的 len 2 的数组是包含 NULL 的未知长度的 bool 数组?)

在第 2 行和第 3 行中,我使用布尔数组初始化 array_members,第一个成员的长度为 2,第二个成员的长度为 1。这样正确吗?

之后就很简单了,像 C 一样。

我可以处理逻辑,但我想知道幕后发生的事情。

【问题讨论】:

  • 没有。第二个数组是指向另一个内存区域的指针。所以第二个数组是一个空地址指针。我会使用 List> 而不是数组,这将更容易添加值。

标签: c# arrays initialization boolean


【解决方案1】:

我声明了一个未知大小的二维布尔数组

好吧,你声明了一个数组数组。它不是一个“真正的”多维数组——应该是bool[,] myBools。值得了解交错数组(元素类型是另一种数组类型的数组)和矩形数组(其中只有一个数组对象,但有多个维度)之间的区别。

那一刻我在数组中有什么?

您有两个空引用。这很容易看到:

bool[][] myBools = new bool[2][];
bool[] array = myBools[0];
Console.WriteLine(array == null); // true

基本上,您只是在创建一个元素类型为引用类型的数组。把它想象成你有一个名为 BoolArray 的类,然后你创建了:

BoolArray[] myBools = new BoolArray[2];

那么您会希望这两个元素的值都为 null,因为这是所有引用类型的默认值,对吗?嗯,这正是你所拥有的......只是数组类型是bool[],而不是一个简单的类。

在第 2 行和第 3 行中,我使用布尔数组初始化 array_members,第一个成员的长度为 2,第二个成员的长度为 1。这样正确吗?

是的,没错。

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2016-12-27
    相关资源
    最近更新 更多