myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Pointerfrage und -Problem (https://mygully.com/showthread.php?t=2775522)

TehEbil 11.12.12 21:45

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

Your_Conscience 11.12.12 21:49

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!?

TehEbil 11.12.12 22:32

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);

slahn 11.12.12 23:14

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; ).

Your_Conscience 12.12.12 00:07

Zitat:

Zitat von TehEbil (Beitrag 24101827)
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,

TehEbil 12.12.12 16:05

Okay, ich danke euch ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.