我进入C#并且有点困惑about an example of the resource im learning from.关于bool数组的声明和初始化,id想知道在代码中的什么点发生了什么:
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]);
我声明了一个未知大小的二维bool数组 - 在同一行中,我使用2个布尔数组初始化数组数组。
阵列中的那一刻我有什么? C#不允许读出值。 (我想我现在有一个包含2个成员的array_main包含未初始化的!bool arrays_members这是正确的吗?所以包含2个成员的len 2数组是包含NULL的未知长度的bool数组?)
在第2行和第3行中,我使用布尔数组初始化array_members,第一个成员使用lenght 2,第二个成员使用lenght 1.这是正确的吗?
之后很简单,C就好。
我可以使用逻辑,但我想了解幕后发生的事情。
答案 0 :(得分:4)
我声明了一个未知大小的二维bool数组
好吧,你声明了一个数组数组。它不是一个“真正的”多维数组 - 即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.这是正确的吗?
是的,确实。