【问题标题】:.NET C# unsafe/fixed CS1666 working with array of pointers to elements in another array.NET C# 不安全/固定 CS1666 使用指向另一个数组中元素的指针数组
【发布时间】:2017-06-26 13:06:40
【问题描述】:

警告!对不起,我英语不好! 在 struct 中使用固定数组:

[StructLayout(LayoutKind.Explicit, Size = 12)]
public unsafe struct union_reg
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)]
    [FieldOffset(0)]
    public fixed byte r[12]; 

    [FieldOffset(0)]
    public fixed UInt16 rp[6]; 
}

尝试通过指针数组创建和访问元素:

union_reg reg = new union_reg();
byte*[] r = new byte*[9] { &reg.r[rB], &reg.r[rC], &reg.r[rD], &reg.r[rE], &reg.r[rH], &reg.r[rL], &rhl, &reg.r[rA], &reg.r[6] };

如果我在函数中声明它,一切都很好,但如果我尝试在类中声明它,我会收到错误 CS1666。请帮忙解决问题!

const byte rB = 1;
const byte rC = 0;
const byte rD = 3;
const byte rE = 2;
const byte rH = 5;
const byte rL = 4;
const byte rA = 7;
const byte rF = 6;`

【问题讨论】:

  • 尝试制作快速算法。模拟旧 CPU。
  • 我无法重现错误:rB、rC、rD 等是如何定义的?

标签: c# arrays pointers fixed unsafe


【解决方案1】:

这个错误在msdn here上有清楚的解释。

您不能将固定类型作为未固定类中的字段/属性。

【讨论】:

  • 我尝试过,但得到同样的错误。 fixed(byte* b = &reg.r[rB]) { }
猜你喜欢
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多