Kann ich tun, arithmetische Operationen auf void * - Zeiger in C?

ist diese gültig

void *p = &X; /* some thing */
p += 12;

und wenn ja, was bedeutet p nun?
Ich habe (Dritten) code, der dies tut (und fehlerfrei kompiliert wird) und meine Vermutung ist, dass die void * behandelt wurde, als ein char *. Mein treuer K&R ist stumm(ish) auf das Thema

EDIT: Meine kleine test-app läuft wunderbar auf gcc 4.1.1 und behandelt void * als char *. Aber g++ barfs

Ich weiß, wie man es richtig machen. Ich muss wissen, ob ich diese sauber code-Basis zu finden, alle die Plätze, fertig.

BTW gcc -pedantic wirft eine Warnung

Zusammenfassung:

Den C-spec ist mehrdeutig. Es sagt, dass in Bezug auf die Darstellung und Verwendung als Funktionsparameter void* =char*. Aber es ist still in Bezug auf Zeiger-Arithmetik.

  • gcc (4) erlaubt es und behandelt es als
    char *
  • g++ weigert sich, es
  • gcc -pedantic warnt davor, es
  • vs2010-c-und c++
    verweigert er diese,

InformationsquelleAutor pm100 | 2010-10-25

Schreibe einen Kommentar