Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
11.12.12, 21:45
|
#1
|
BoZz
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 5
|
Pointerfrage und -Problem
Folgender Code:
Code:
int nummer = 1,
*pointer = 0;
pointer = &nummer;
printf("1 %x\n", &pointer);
printf("2 %x\n", pointer);
printf("3 %x\n", *pointer);
printf("4 %d\n", &pointer);
printf("5 %d\n", pointer);
printf("6 %d\n",*pointer);
printf("2 %x\n", pointer);
printf("1 %x\n", &pointer);
printf("3 %x\n", *pointer);
printf("5 %d\n", pointer);
printf("4 %d\n", &pointer);
printf("6 %d\n",*pointer);
Wieso ist dasselbe mit dem kaufmännischen Und um 12 Einheiten größer? (Integer -> 4, also 3 bytes)?
Und zweitens - ein Pointer hat keinen eigenen Wert, stimmt das?
MfG
|
|
|
11.12.12, 21:49
|
#2
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Ein Pointer ist nur ein Zeiger auf eine Speicheradresse, der Wert eines Pointers ist also sozusagen die Adresse auf die er Zeigt.
Zu dem "um 12 Einheiten größer":
Du fragst nirgends den Speicherplatz ab!?
|
|
|
11.12.12, 22:32
|
#3
|
BoZz
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 5
|
Las das mal bitte abspielen. Wenn die Speicheradresse um 12 verschoben ist, heißt das nicht dann, dass die um diese Größe größer ist?
printf("4 %d\n", &pointer);
printf("5 %d\n", pointer);
|
|
|
11.12.12, 23:14
|
#4
|
Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
Also printf("4 %d\n", &pointer); gibt dir die Adresse von "pointer" als Integer aus und printf("5 %d\n", pointer); gibt dir die Adresse von "nummer" (also die Adresse von dem Element auf das "pointer" zeigt) als Integer aus.
Also einmal alles zusammengefasst:
pointer -> gibt dir die Adresse auf die "pointer" zeigt (in deinem Fall die Adresse wo "nummer" im Speicher liegt
&pointer -> gibt dir die Adresse wo "pointer" liegt (bzw. die Adresse wo der Wert von "pointer" gespeichert ist und somit die Adresse wo die Adresse hinterlegt ist, auf die "pointer" zeigt)
*pointer -> Gibt dir den Wert zurück, auf den "pointer" zeigt (in deinem Fall den Wert von "nummer")
&pointer funktioniert nicht anders wie deine Zuweisung pointer = &nummer; ... Da gibst du "pointer" die Adresse von "nummer" ... mit &pointer bekommst du eben die Adresse von "pointer" ... denn auch ein Pointer hat eine Adresse und man kann eben auch Pointer auf Pointer machen (int **pointerPointer; ).
|
|
|
12.12.12, 00:07
|
#5
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Zitat:
Zitat von TehEbil
Las das mal bitte abspielen. Wenn die Speicheradresse um 12 verschoben ist, heißt das nicht dann, dass die um diese Größe größer ist?
|
Um dir diese Frage noch zu beantworten: nur wenn die Variablen im RAM direkt hintereinander gespeichert werden und eine Größe von %4 = 0 besitzen.
Du kannst die Größe einer Varibale mit sizeof ermitteln.
Auf 32 Bit Rechnern benötigen int-Variablen sowie Pointer stets 4 Byte, auf 64 Bit Rechnern (und mit einem 64 Bit Compiler compiliert) benötigen diese 8 Byte,
|
|
|
12.12.12, 16:05
|
#6
|
BoZz
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 5
|
Okay, ich danke euch
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
().
|