【问题标题】:The * operator must be applied to a pointer error in code* 运算符必须应用于代码中的指针错误
【发布时间】:2015-09-11 09:14:36
【问题描述】:

我可以在即时窗口中执行var b = *myObject;,它会给我一个0x123456 格式化值。但我不能在代码中做到这一点。然后它说

* 或 -> 运算符必须应用于指针

为什么我可以在即时窗口中执行此操作,但不能在代码中执行此操作?

【问题讨论】:

  • 我认为这可能与不允许指向托管类型的指针有关,只有值类型。在编译时,它将*myObject 识别为指向托管类型的指针。在即时窗口中,它会将其识别为对myObject 的引用地址,即object& 类型,因此取消引用该 .我不确定这一点,但只是把它扔在那里,希望它可以为你指出(不是双关语)更好的答案。

标签: c# visual-studio pointers immediate-window


【解决方案1】:

使用不安全指针 vs.s. 的示例访问编组

IntPtr pLineBuf;
int[] lineData;
//.
//.
//.

pLineBuf = Marshal.AllocHGlobal(8192 * sizeof(byte));
lineData = new int[8192];

// access elements like this
unsafe
{
    byte* pa = (byte*)plineBuf;  // cast from IntPtr
    for (int j=0; j<10; j++)
       lineData[j] = *(pa + j);    
}

// OR

for (int j=0; j<10; j++)
     lineData[j] = (Marshal.ReadByte(plineBuf + j)); 

【讨论】:

    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多