C# 关于C中数组下标的问题#

C# 关于C中数组下标的问题#,c#,c,arrays,multidimensional-array,C#,C,Arrays,Multidimensional Array,回到旧的C语言时代,可以使用数组订阅以非常有用的方式寻址存储。例如,可以这样声明一个数组 该阵列表示具有8位字的EEPROM图像 然后,将该阵列视为真正的多维存储 BYTE mpuImage[2][512] = eepromImage; 我肯定我的语法错了,但我希望你能理解 无论如何,这投射了一个真正的一维存储的二维图像 二维投影表示当用16位字加载到MPU存储器中时的EEPROM图像 在C中,人们可以多维引用存储并更改值,而更改后的值将显示在真实(一维)存储中,几乎就像魔术一样 可以用C做同

回到旧的C语言时代,可以使用数组订阅以非常有用的方式寻址存储。例如,可以这样声明一个数组

该阵列表示具有8位字的EEPROM图像

然后,将该阵列视为真正的多维存储

BYTE mpuImage[2][512] = eepromImage;
我肯定我的语法错了,但我希望你能理解

无论如何,这投射了一个真正的一维存储的二维图像

二维投影表示当用16位字加载到MPU存储器中时的EEPROM图像

在C中,人们可以多维引用存储并更改值,而更改后的值将显示在真实(一维)存储中,几乎就像魔术一样

可以用C做同样的事情吗


我们当前的解决方案使用多个数组和事件处理程序来保持同步。这种方法可行,但如果有更好的方法,我们希望避免额外的复杂性。

您可以将数组封装在类中,并编写一维和二维索引器属性

在没有验证等情况下,10x10阵列的情况如下:

    class ArrayData
    {
        byte[] _data = new byte[100];

        public byte this[int x]          
        { 
            get { return _data[x]; } 
            set { _data[x] = value; }             
        }


        public byte this[int x, int y]
        {
            get { return _data[x*10+ y]; }
            set { _data[x*10 + y] = value; }
        }
    }
是的,但不是

如果愿意,您可以立即分配多维数组。您还可以创建一个自定义类,该类允许您以单维或多维方式访问其基础数据,从而保持基础数据的同步


但是,您不能直接访问具有多维索引的一维数组。

您确定2参数版本中的计算结果吗?不应该是
\u data[x*y]
?不,他假设的是10乘10的网格。它应该是x*width+y@jjnguy:否,
x*10+y
对于10x10阵列是正确的,但我没有明确说明。编辑。
    class ArrayData
    {
        byte[] _data = new byte[100];

        public byte this[int x]          
        { 
            get { return _data[x]; } 
            set { _data[x] = value; }             
        }


        public byte this[int x, int y]
        {
            get { return _data[x*10+ y]; }
            set { _data[x*10 + y] = value; }
        }
    }