Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » also kann mir jemand.....

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 <
000
14.01.2003, 16:24 Uhr
~honk
Gast


hi @ all

also ich beschäftige mich heute erstmalig mit c++ und surfe wild durchs netz
um howtos etc. also infos zu sammeln .
dabei bin ich immer wieder auf quellcodes gestossen die variablen enthalten die mit einem sternchen
beginnen wie z.b "*basis" oder "*char"
ich hab mit php schon so einige erfahrungen gesammelt aber das ist mir neu

nun weiss ich das das zeiger sind aber könnte mir jemand mal sagen wie die zustandekommen oder benutzt werden ?

mir ist aufgefallen das das sternchen mal vor und mal hinter der variable steht aber einen reim kann ich mir auf diese aliens nicht machen

ich weiss das das wohl ne lästige newbie frage ist aber könnte sich vielleicht doch mal jemand meiner erbahmen?

vielen dank honk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.01.2003, 17:13 Uhr
Alf



Hy!

(Lies erst mal den Quell-code bis ende der void main() Funktion. Und dann die Kommentare.)


C++:
void berchene1(int a, int b) /* a und b haben nichts mit a und b
aus void main zu tun und bekommen den wert a = 1 und b = 2;*/

{
int tmp = a;
a = b;
b = tmp;    // a und b werden getauscht
}

void berchene2(int *a, int *b)/* der Zeiger a erhält die Addresse von a aus void main Zeiger b die von b aus void main*/
{
int tmp = *a;  /* das was im Arbeitsspeicher(Ar.-Sp.) an der Addresse *a steht wird in tmp Kopiert*/
*a = *b; /* das was im Ar.-Sp an der Addresse *b steht wird in die Addresse *a Kopiert*/
*b = tmp;/* tmp wird zu Addresse *b Kopiert*/
}

int main()
{
int a = 1;
int b = 2;

berchene1(a, b);  //übergibt 1, 2
// a ist hier immer noch 1 und b immer noch 2

berchene2(&a, &b);//übergibt die Arbeitsspeicher Addresse von a und b
//a ist jetzt 2 und b ist 1
}



In der berchene2 hätte ich auch


C++:
a = b;


schreiben können. Hier kopiere ich die Addresse auf die b zeigt nach a.



C++:
int *a;
int* b;


a gibt die Addresse ,*a den Wert der an der stelle steht.
b gibt den wert der an der Addresse steht.

Mfg

Andy
--
Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.01.2003, 17:38 Uhr
Alf



Hy!

Hopla.

Ich glaube der untere Teil ab "In der berchene2 hätte ich auch" ist falsch.

Hm...

Ich muss mich woll nochmal neu ein lesen!

(aber der erste code block ist so richtig!)

Andy
--
Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.01.2003, 18:41 Uhr
Alf



Bor ist das Kompliziert!

Noch mal ganz neu:

Hast du eine Funktion

C++:
void Berechne(int a, int b)

so sind a und b Lokale Variablen dennen du durch

C++:
int Wert1 = 1;
int Wert2 = 2;
Berechne(Wert1, Wert2)

die Wert 1 für a und 2 für b zuweist.
Eine Vertauchung von a und b wie oben ist nur Lokal in der Funktion wirksam, hat aber keinen Einfluss auf die Variablen Wert1 und Wert2.


C++:
void Berechne(int *a, int *b)



C++:
int Wert1 = 1;
int Wert2 = 2;
Berechne(&Wert1, &Wert2)


Der Funktions Aufruf übergibt, durch den Adress-Operator &, die Arbeitsspeicher Adressen.
a zeigt nun auf denn Speicher von Wert1 und b auf Wert2.
*a gibt den Wert des Speichers wieder auf den sie zeigt, a die Adresse.

wenn du nun *a = 10; machst so wird der Speicher von der Variablen Wert1 überschrieben(da a darauf zeigt).
Die Variable Wert1 hat nun den Wert 10.

Mfg

Andy
--
Mfg

Andy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.01.2003, 14:36 Uhr
~honk
Gast


hmm.. also kann ich es so verstehen das ich z.b

eine lokale variable über diesen zeiger ausserhalb ihres gültigkeitsbereiches(funktion) bearbeiten kann ohne sie global verfügbar machen zu müssen (wenn es sowas in c++ überhaupt gibt).



mfg honk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.01.2003, 14:42 Uhr
~honki
Gast


Oh.... ich hab da noch eine erkenntnis vergessen

ich muss eine definierte zeiger variable also auch erst über den adressoperator laden .

sprich die zeigervar *a ist nicht auch automatisch der zeiger auf variable a
sondern *a könnte eine xbeliebige adresse enthalten z.b auch von variable x.

ist das so in ordnung?

mfg honk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.01.2003, 15:10 Uhr
virtual
Sexiest Bit alive
(Operator)


@honk
Ja. Genauer:
Eine Zeigervariable die global deklariert ist, ist stets NULL, bis ihr was zugewiesen wird. Eine Zeigervariable die lokal deklariert ist, zeigt irgendwohin (meist in einem Speicherbereich, der nicht dir gehört), weil sie uninitialisiert ist. Zur veranschaulichung:

C++:
int* a; // global, daher mit NULL initialisiert

int main()
{
    int*b; // Zeigt nach Kraut und rüben
    int c;  // c ist der Name eines Speicherbereichs, der ein int aufnehmen kann

    b = &c; // Jetzt zeigt b auf den Speicherbereich von c

    *b = 4711; // Jetzt ist c 4711
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.01.2003, 15:45 Uhr
~honk
Gast


ahso gut zu wissen
dank an alle die sich meiner angenommen haben

das soll also rüstzeug in sachen zeiger wohl erstmal reichen

mfg honk
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: