Frage

Ich bin von einem Byte-Array wie folgt lautet:

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

korrigiert mich wenn ich falsch liege, aber ++ Vorrang vor * hat, so kann die * i zu kombinieren und i ++ in der gleichen Aussage? (Z * i ++)

(dies ist technisch unsicher C #, C ++ nicht, p ist ein Byte *)

War es hilfreich?

Lösung

Ich glaube, dass

id = *i;
i++;

und

id = *i++;

entspricht.

Der ++ Operator, wenn als Suffix verwendet (z.B. i++), gibt den Wert der Variablen vor dem inkrementieren.


bin ich etwas von dem Reflektor Ausgang für

verwirrt
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++;
    }
}

, die kommt als

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

und

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

, die eindeutig nicht gleichwertig sind.

Andere Tipps

id = *i++

wird tun, was Sie wollen.

++ ändert den Zeiger nach dem dereferenzieren.

EDIT: Wie Eric weist darauf hin, gemäß der Spezifikation, geschieht ++ nicht nach dereferenzieren. i ++ Schritten i und Rück seinen Anfangswert, so dass die spec definiertem Verhalten ist das Inkrement zu dereferenzieren vor passiert. Das sichtbare Verhalten von id = * i ++ ist das gleiche, ob Sie den Zuwachs sehen geschieht vor oder nach dereferenzieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top