Ich hab das jetzt mit dem VC (microsoft visual studio 2005) durchprobiert. Das sollte eigentlich schon auf GCC übertragbar sein.
Vorweg:
Klammervarianten:Code:int* p = (char*)1000; // geht garnicht, verständlich, ist ja auch ein widerspruch
Code:int* p = (int*)1000;Code:(char*)p++; // kennen wir schon, liefert p+4 (int)p++; // ebenfalls p = (int*)(int)p++; // ebenfalls ((char*)p)++; // Mag er garnicht ==> error C2105: '++' needs l-value
Was geht ? (definitiv getestet)
Code:int tmp = (int)p; p = (int*)++temp;
Code:union { int* p; int iP; } un; un.p = (int*)1000; un.iP++ ; // (durch die union wird auch int*p mit-incrementiert
und die grausliche Variante
Code:p = (int*)((int)p + 1);
Wie gesagt: getestet
Lesezeichen