解引用和指针提前在一个声明?
-
11-09-2019 - |
题
我是从一个字节阵列读取如下:
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 + +是相同的你是否查看增量发生之前或之后解除引用
不隶属于 StackOverflow