在C代码中定义了这样的数组:u8 palette[4][4];
后来一些元素像这样访问:palette[ val & 3 ]
在 C 代码中,它是这样使用的:memcpy(dest3+12, palette[ val & 3 ], 4);
我不明白通过这段代码访问了什么元素。
我试图在 C# 中做同样的事情,但它告诉我 Wrong number of indices inside [];预期 2
最佳答案
在 C 中,您可以指向数组中的特定行,因为 C 数组只是项目的序列。两个后续数组再次只是项目序列,这就是为什么可以在 C 中访问子数组的原因。这就是为什么不能仅从数组指针获取 C 中数组大小的原因。
在 C# 中,有两种类型的“多维”数组:Multidimensional arrays和 Jagged Arrays .
经典的多维不能仅通过子索引访问,因为C#中的数组不仅仅是一个项目序列,还有一个header in which contain size of array, type pointer and sync block。 .两个后续的 C# 数组将在内部包含一个 header ,并且它不符合 C# 数组格式。
Jagged array是数组的数组,您可以使用类似于 C# 的方式访问仅具有子索引的子数组。
C# 中的等效代码为:
byte[][] palette = new byte[4][];
for (int i = 0; i < palette.Length; i++)
{
palette[i] = new byte[4];
}
byte[] destination = new byte[4];
int val = 1;
Array.Copy(palette[val & 3], 0, destination, 12, 4);
请注意,在 memcpy 中参数顺序为:destination, source 而在 Array.Copy 中是倒序的参数:source, destination
关于c# - 像: palette[ val & 3 ]?这样C的二维数组访问的C#模拟是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940339/