我是从一个字节阵列读取如下:

int* i = (int*)p;
id = *i;
i++;

纠正我,如果我错了,但++的优先级高于*,所以可以结合* i和i在同一语句++? (例如* I ++)

(这在技术上是不安全的C#,而不是C ++,p是一个字节*)

有帮助吗?

解决方案

相信

id = *i;
i++;

id = *i++;

是等效的。

++操作者,作为后缀(例如i++)一起使用时,变量之前的值返回到增量。


我有些由反射器输出混淆为

unsafe class Test
{
    static public void Test1(int p, out int id)
    {
        int* i = (int*)(p);
        id = *i;
        i++;
    }

    static public void Test2(int p, out int id)
    {
        int* i = (int*)(p);
        id = *i++;
    }
}

其中出来作为

public static unsafe void Test1(int p, out int id)
{
    int* i = (int*) p;
    id = i[0];
    i++;
}

public static unsafe void Test2(int p, out int id)
{
    int* i = (int*) p;
    i++;
    id = i[0];
}

这显然是不等价的。

其他提示

id = *i++

会做你想要什么。

++反引用后修改指针。

编辑: 正如埃里克指出,按照规范,++不提领后发生。我+ + i递增,并返回它的初始值,所以规范中定义的行为是之前取消引用增量发生。 ID的可见行为= * I + +是相同的你是否查看增量发生之前或之后解除引用

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top