WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 08.04.2002, 19:27   #1
Hamster Riot
Jr. Member
 
Registriert seit: 20.05.2001
Alter: 42
Beiträge: 72


Standard Unterschied zwischen Pointer und Zeiger in C++?

Hallo Leute!

Vor ein paar Tage habe ich begonnen c++ zu programmiern und bin dabei über pointer und zeiger gestolpert. Leider kann ich nicht herausfinden, was der Unterschied ist. Was macht das Zeichen * bzw. das Zeichen &??

Könnt ihr mir auch Literatur empfehlen, wo etwas nachlesen bzw. neues Lernen kann. (sollte bei null anfangen).

Danke! Ciao Hamster Riot
Hamster Riot ist offline   Mit Zitat antworten
Alt 08.04.2002, 20:06   #2
Andre@s
Elite
 
Registriert seit: 05.09.2000
Alter: 58
Beiträge: 1.389


Andre@s eine Nachricht über ICQ schicken
Standard

C++ für Dummies. Kein Mist, verwende ich selbst gerade, ist brauchbar, und auch lesbar geschrieben.

Wenn du auf der MS-Schiene bist, bist bei Microsoft Press auch gut aufgehoben (Visual C++ Schritt für Schritt), oder auch hier Visual C für Dummies.

Aber über C/C++ gibt´s ja ewig viele Bücher, kannst aus dem Vollen schöpfen, sozusagen.
____________________________________
lg. Wolfgang

Irren ist menschlich - um die Lage wirklich ekelhaft zu machen, benötigt man schon einen Computer...
Andre@s ist offline   Mit Zitat antworten
Alt 08.04.2002, 20:11   #3
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard

ein pointer ist ein zeiger

ein variablenname mit einem * davor ist ein pointer auf diese variable
zb ist int *test ein zeiger auf eine integer variable (du kannst dir auch vorstellen es handelt sich um den typ "int *" -> also ein integerpointer

das & bewirkt, dass aus einem pointer wieder der wert der variablen wird:
wenn du zum beispiel eine pointervariable int *test hast und damit rechnen willst musst du mit "&test" arbeiten, da du sonst die adresse anstatt dem integerwert bekommen würdest

ein kleiner buchtipp am rande: practical c++ programming aus dem o'reilly verlag - das beste das ich kenne - auch und gerade für anfänger geeignet
it00x30 ist offline   Mit Zitat antworten
Alt 08.04.2002, 20:22   #4
Andre@s
Elite
 
Registriert seit: 05.09.2000
Alter: 58
Beiträge: 1.389


Andre@s eine Nachricht über ICQ schicken
Standard

Ja, ist sehr gut (habs bei mir im Kasten stehen - noch zur Zeit), aber nicht für jeden geeignet, da in Englisch..... Mein Englisch ist zwar halbwegs passabel, aber beim Lernen lese ich doch lieber Ausdrücke, die ich nicht extra im Wörterbuch (falls überhaupt vorhanden) suchen muß. Und diese Ausdrücke können bei Programmiersprachen sehr umfangreich, und auch sehr mißverständlich sein, so daß dies nicht gerade förderlich wäre.

Ich programmiere mittlerweile (nach jahrelanger Berufserfahrung) in einigen Programmiersprachen, und habe auch etliche englische Manuals durchgeackert, aber beim Selbststudium (und das ist es gerade bei C bei mir), ist mir Deutsch einfach lieber.
____________________________________
lg. Wolfgang

Irren ist menschlich - um die Lage wirklich ekelhaft zu machen, benötigt man schon einen Computer...
Andre@s ist offline   Mit Zitat antworten
Alt 08.04.2002, 23:34   #5
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard

Das Standardwerk für C++-Programmierung ist das Buch von Bjarne Stroustrup .
____________________________________
Bibel
Flink ist offline   Mit Zitat antworten
Alt 09.04.2002, 02:01   #6
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

@Hamster Riot wie alle anderen:

* bedeutet bei der Variablendefinition, daß eine Zeiger- - auch Pointer- - Variable genannt angelegt wird, die auf den Datentyp zeigt der vor dem '*' Zeichen steht.

Das Beispiel dazu lautet wie folgt:

Also kurz mal durchblasen:

int integer_variable;

eine Zeigervariable auf ein Integerdatum definiert man allerdings so:

int * zeiger_auf_eine_integer_variable;

bzw.

int * pointer_auf_eine_integer_variable;

Pointer ist lediglich der englische Ausdruck für das Wort 'Zeiger' im Deutschen.

Was eine Zeigervariable macht ist einfach:

Man speichert in ihr eine Adresse des Computerspeichers, sonst nichts !

An dieser Adresse - auf die so eine Zeigervariable verweist - stehen dann (eine Abfolge von) Daten, oder EIN Datum. Wie eben - beispielsweise - ein Wert vom Typ int.

Die Verwendung von * und & im Programmcode und nicht bei der Definiton von Zeigern bedeutet nachfolgend das:

*zeigervariable liefert den Wert der Daten / des Datums, auf das die Adreßvariable 'zeigervariable' verweist.

&integervariable liefert die Adresse der Variable 'integervariable'.

int x,*zeiger_auf_x;

x=2;

zeiger_auf_x= &x;

*zeiger_auf_x= 3;

printf("%d\n",x); /* in x steht bereits 3 obwohl x nur indirekt - eben über einen Zeiger (=Zeigervariable) - verändert worden ist */

Bei Übergabeparametern bedeutet das Zeichen '&' (=Ampersand) die Deklaration einer sogenannten Referenz. Eine Referenz bedeutet einen Zeiger zu übergeben und in genau eben in dieser selben Funktion, in der diese 'Referenz' als einer der Übergabeparameter deklariert wurde, diesen Referenzübergabeparameter so zu verwenden wie in der aufrufenden Funktion.

Ein nachfolgendes Beispiel:

void double_it (int &variable)
{
variable *= 2;
}

void main (void)
{
int zentimeterlaenge;

zentimeterlaenge= 100;

printf("Länge in Zentimetern: %d\n",zentimeterlaenge);

double_it(zentimeterlaenge);

printf("doppelte Länge in Zentimetern: %d\n",zentimeterlaenge);
}

D.h. das Ampersand '&' bedeutet bei der Verwendung innerhalb einer Funktion 'Adresse von' und beim Deklarieren eines Übergabeparameters 'Variable von außerhalb übernommen'.

Das Zeichen '*' bedeutet beim Definieren von Variablen 'Zeiger auf ...' ( ... Datentyp ) und beim Verwenden in einer Funktion innerhalb von C-Befehlskonstrukten 'Wert an der Adresse ... xy ...'.

Das xy ist dann der Inhalt einer Adreß- (=Zeiger-) Variable.

mfg Kikakater
kikakater ist offline   Mit Zitat antworten
Alt 09.04.2002, 09:18   #7
Flink
Hero
 
Registriert seit: 29.08.2001
Alter: 57
Beiträge: 904


Flink eine Nachricht über ICQ schicken Flink eine Nachricht über Skype™ schicken
Standard

Und bei Klassen in C++ ist es so, daß '*' und '&' vom Programmierer selbst programmiert werden können. Das macht einem das Leben schwer, wenn man nicht genau weiß, auf welche Art diese Operatoren überladen worden sind. Man glaubt, es sei ein Pointer auf eine Klasse, doch womöglich liefert der *-Operator über Typecasting den Inhalt einer selbst verwalteten Speicheradresse.
____________________________________
Bibel
Flink ist offline   Mit Zitat antworten
Alt 09.04.2002, 16:00   #8
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Null problemo dazu denn:

int **_16bit_variable;

*_16bit_variable liefert - und das ist nativer C-Code - schließlich und endlich auch eine Adresse, weil hier ein Zeiger auf einen Zeiger auf einen Integerspeicherplatz (2 Byte Datentyp) definiert worden ist mit int **_16bit_variable; ZeigeraufZeigervariablename.

Entscheidend bei so einer Überladerei ist das Holzhackenprogrammieren außen vor zu lassen. * liefert immer einen Wert, Zeiger auf Zeiger liefern halt eine Adresse logischerweise, insofern legitimerweise.

Und & ist ebenso einzusetzen, abseits der törichten Verwendung als etwas anderes als als Adressenlieferantoperator. Zweimal als, schon schön das Leben Davor sogar bereits gar einmal. Tja, in klaren Worten: & liefert eine Adresse, wer sich skalare Werte liefern lässt durch das Überladen handelt damit fahrlässig. Das heißt man sollte tunlichst auf die mathematische Funktionalität von C/C++ nicht verzichten um Tricks umzusetzen.

Solche Ratschläge finden sich auch in Büchern zu C++ um derartige Brachial- nicht Anfänger- Fehler nicht zu begehen.

* bedeutet 'Wert von'
& bedeutet 'Adresse von'

mfg
Kikakater
kikakater ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:19 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag