Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Unterschied zwischen Adress of (&) und Pointern (*)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
10.01.2009, 13:53 Uhr
~Instinction
Gast


Hallo COmmunity,

mir ich habe bis jetzt immer mit adress of operatoren gearbeitet

zb scanf("%i",&a);

jetzt will ich mich mal an pointern versuchen jedoch verstehe ich nicht genau den unterschied.

bei dem scanf befehl wird der eingegebene wert in dem speicherplatz der variablen a gespeichert.

Der Pointer zeigt auch auf einen speicherplatz.

Im internet gibt es eine interessante aufgabe:


Code:
int zahl1,zahl2;

int* pointer;

zahl1=5;
zahl2=10;

pointer = &zahl1;
*pointer=zahl2;


welchen wert haben zahl 1 und 2 nach dem durchlauf


vielleicht könnte mir einer pointer und adress of operatoren anhand diesr prozedur erklären

MfG

Instinction
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.01.2009, 15:55 Uhr
Lensflare



Da muss man unterscheiden:

Bei der Deklaration bedeutet
* dass man einen Pointer deklariert und
& dass man eine Referenz deklariert. Die muss dann auch gleich definiert werden.


C++:
int* p; //Ein Pointer. Enthält eine Adresse

int a;
int& b = a; //Eine Referenz auf a



Und dann beim Zugriff auf die Variablen:


C++:
int x = *p; //Den Wert, der an der Adresse p steht, in x schreiben.
p = &a; //Die Adresse, an der der Wert von a steht, in den Pointer p schreiben



* holt sich also den Wert an einer Adresse und
& holt sich die Adresse eines Werts.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 10.01.2009 um 15:59 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.01.2009, 16:26 Uhr
~Instinction
Gast


Ist das nicht das gleiche? da jede adresse auch einen anderen wert hat ..

Is der wert an einer adresse und die adresse eines wertes nicht das gleiche ? in der adresse eines wertes ist ja gleichzeitig auch der wert drin ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.01.2009, 16:31 Uhr
~Instinction
Gast


und wann schreibt man einen deklariernten pointer mamens pointer mit und ohne *?

p = &a
x = *p
...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.01.2009, 17:32 Uhr
Lensflare




Zitat:

Ist das nicht das gleiche? da jede adresse auch einen anderen wert hat ..
Is der wert an einer adresse und die adresse eines wertes nicht das gleiche ? in der adresse eines wertes ist ja gleichzeitig auch der wert drin ...


ne, das ist nicht das gleiche.

also angenommen du hast ne variable namens a angelegt und dort den wert 7 gespeichert...

int a = 7;

der wert von a ist also 7. dann könntest du die adresse dieses Wertes herausfinden indem du das schreibst:

printf("&i", &a);

Die adresse wird in der Gestalt einer Zahl ausgegeben.

diese adresse kannst du in einen pointer speichern:

int* p;
p = &a;

Angenommen, a hätte die Adresse 5. Dann würde in p nun der Wert 5 stehen.

und dann könnte man wieder den Wert an der Adresse 5 ausgeben, nämlich so:

printf("%i", *p);

Das wird nun 7 ausgeben, weil in p die adresse von a drin steht und in a ist ja 7 drin.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 10.01.2009 um 17:34 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.01.2009, 17:36 Uhr
~Instinction
Gast


Das ist einleuchtend , danke

wann benutzt man jedoch bei einem deklarierten pointer zb p ein stern davor und wann net ..
wie du schon geschriebn hast
p = &a;
warum nicht
*p=&a

?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.01.2009, 17:58 Uhr
Lensflare



also p wurde ja als Pointer deklariert. also mit *

Deswegen erwartet der Compiler, dass dem pointer auch Adressen zugewiesen werden und nichts anderes.

&a ist eine adresse und wird fehlerfrei zugewiesen.

wenn ich
*p=&a

schreiben würde, dann würde der compiler verstehen:
Weise dem Wert, der an der Adresse von p steht, die Adresse von a zu.
also einem int die Adresse eines ints zuweisen.

Auch wenn die adresse theoretisch in ein int passen würde, muss der compiler davon ausgehen dass du einen denkfehler gemacht hast und dies als fehler melden.


Nachtrag:
Man deklariert einen pointer mit * und dann verwendet man ihn ohne den stern. man muss den copiler nicht daran erinnern, dass es ein pointer ist. das weiss er schon

ein stern bei einem pointer beim zugriff würde den Wert an seiner Adresse ansprechen.

Das ist leider das verwirrende, deswegen habe ich die deklaration und den Zugriff im ersten posting so getrennt beschrieben
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 10.01.2009 um 18:07 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.01.2009, 18:46 Uhr
~Instinction
Gast


Alles klar!

jetzt weis ich glaube ich bescheid

vielen dank für die erklärung!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.01.2009, 13:51 Uhr
~global
Gast


hallo,
steht ein stern vor nem pointer nennt man das dereferenzierung
[/cpp]
int a = 4;
int *p = &a; // p zeigt auf a

*p++; // inhalt von a erhöhen
p++; // adresse erhöhen, zeigt dann natürlich nicht mehr auf a
[cpp]
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.01.2009, 14:07 Uhr
~Instinction
Gast


danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: