質問

次のように私はバイト配列から読んます:

int* i = (int*)p;
id = *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++

あなたが欲しいものを行います。

++デリファレンスした後、ポインタを変更します。

編集: エリックが指摘するように、スペックごとに、++は間接参照後に発生しません。私は、その初期値を返しますので、仕様定義された動作は、インクリメント前間接参照に起こるである増分を++します。 IDの目に見える行動を= *私は++あなたが間接参照の前または後に起こっ増分を表示するかどうかと同じである。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top