代码出现了“必须将*操作符应用于指针”的错误。

3

我可以在立即窗口中执行var b = *myObject;,并得到一个格式化值0x123456。但是我不能在代码中执行此操作。它会提示:

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

为什么我可以在立即窗口中这样做,但在代码中却不行?


2
我认为这可能与不允许指向托管类型的指针有关,只能是值类型。在编译时,它将*myObject识别为托管类型的指针。在直接窗口中,它将其识别为引用myObject的地址,该引用是类型为object&的,因此正在对其进行解引用。虽然我不确定这一点,但希望它可以指向更好的答案。 - Stainy
1个回答

0

使用不安全指针访问示例 v.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)); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接