Pointer problem
-
Sebi3000 schrieb:
*(byte **) part = link;
Was macht das genau, und was ist der Unterschied zu folgendem? Ist doch eigentlich das Gleiche oder etwa nicht?
(byte *) part = link;
nee, ist nicht das gleiche.
*(byte **) part = link;
kopiert den inhalt von 'link' dort hin, worauf 'part' zeigt. 'part' selber wird nicht verändert.
(byte *) part = link;
überschreibt den inhalt von 'part' mit dem inhalt von 'link'. 'part' wird also verändert.
-
Du kannst es ja auch mal an diesem Codebeispiel durchspielen.
int a = 5; int *ptr_a; int **handle_a; int *deref_a; ptr_a = &a; handle_a = (int**) ptr_a; deref_a = *handle_a;
-
Hallo,
da wir uns im ANSI-C-Forum befinden, sollte man darauf hinweisen, dass
(byte *) part = link;
im Standard nicht erlaubt ist (das Resultat eines cast ist ein r-value), obwohl es Compiler gibt, die es im Rahmen einer Erweiterung doch zulassen (gcc gibt dabei eine Warnung aus).
MfG,
Probe-Nutzer
-
Vielen Dank euch allen
Ich denke ich habe es trotz OpenAir am Wochenende endlich geschnallt, oder meine es zumindest....
Noch zum Codebeispiel vom Bitburger, in deref_a steht dann eine fünf oder, also eine dereferenzierung würde mir irgendwas undefiniertes ausgeben, und zwar das was an speicherstelle 0x5 steht oder?
Gruess
Sebi
-
Sebi3000 schrieb:
Noch zum Codebeispiel vom Bitburger, in deref_a steht dann eine fünf oder, also eine dereferenzierung würde mir irgendwas undefiniertes ausgeben, und zwar das was an speicherstelle 0x5 steht oder?
ja, aber undefiniert ist es nicht. kommt auf dein system an, ob es zugriffe auf die adresse 5 zulässt oder nicht.
btw, wieso bitburger aus 'nem int* einen int** macht, ist mir aber schleierhaft.
-
also, ich finde immer wieder schön und erschreckend was man alles mit Pointern machen kann. Allerdings muss ich zugeben, dass die Deferenzierung über mehrere Pointern selbst mir Schwierigkeiten bereitet.
Ich sehe oft von Anfängern bzw. nicht ganz erfahrenen C-Programmierern, dass sie dazu tendieren, solche Probleme (wie oben) zu lösen und/oder sowas zu schreiben, was bitburger geschrieben hat. Da frage ich mich: wieso so kompliziert, wenn es einfacher geht?
-
An fricky:
Ist mein Beispiel so schrecklich ? Wenn ja, mach dir keine Sorgen. Ich habe das Beispiel so konstrukiert dass es zu meiner Aussage passt und einem das Verständniss von Pointer näher bringen soll. Der Quelltext wurde also völlig sinnfrei erzeugt.
-
Bitte ein Bit schrieb:
Ist mein Beispiel so schrecklich ?
ich frag mich nur, wozu der *int *handle_a da ist?
-
Naja, ich glaube so richtig verstanden hast du mich nicht. Der ganze Quelltext hat keinen Sinn außer mit der Pointerarithmetik ein wenig rumzuspielen.
Der Quelltext habe ich nur geschrieben und getestet weil ich mal sehen wollte, was denn nun passiert, wenn ich wild mit Pointer herumschlage.
-
Bitte ein Bit schrieb:
Naja, ich glaube so richtig verstanden hast du mich nicht. Der ganze Quelltext hat keinen Sinn außer mit der Pointerarithmetik ein wenig rumzuspielen.
wo ist denn da pointerarithmetik? so'n komischer cast von int* nach int** kann man ja wohl kaum 'arithmetik' schimpfen.