Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zeiger auf Zeiger

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
02.07.2003, 13:49 Uhr
~Peter
Gast


Hallo zusammen,

habe Probleme bei einer Übungsaufgabe:
c ist ein Zeiger auf einen konstanten Buchstaben-Zeiger

Musterlösung: char* const &c;

Warum ist das so? Wie sieht die Alternative ohne Referenz aus?

Hoffe, mir kann jemand weiterhelfen.
Danke + Gruß
Peter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2003, 13:52 Uhr
~hulk
Gast


char **c;

hier ist c auch ein zeiger auf einen zeiger.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.07.2003, 14:17 Uhr
ao

(Operator)


@Peter:
Das ist ein Zeiger auf eine Referenz, kein Zeiger auf einen Zeiger.

Ein Zeiger auf einen Zeiger (ohne jedes const) ist das hier:

C++:
char ** ppCh;


und wenn const ins Spiel kommt, frag ich sicherheitshalber noch mal nach: Welches Objekt soll const sein, der Buchstabe oder der Zeiger darauf? Oder beide?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.07.2003, 14:30 Uhr
~Peter
Gast


@ao
der Buchstaben-Zeiger soll konstant sein.

kann eine Referenz nicht auch als konstanter Zeiger angesehen werden?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.07.2003, 15:45 Uhr
~0xdeadbeef
Gast


Genaugenommen ist ein

C++:
char *const &c;


eine Referenz auf einen konstanten Zeiger. Das funktioniert nur in C++, C kennt keine Referenzen. Eine Referenz ist nachher auf der Maschine natürlich ein Zeiger, aber in der Hochsprache C++ wird sie gehandhabt wie eine normale Variable. Zum Beispiel: Schreib eine Funktion, die einen Parameter entgegennimmt und dessen Wert quadriert. In C ist die einzige Möglichkeit ein Call-by-reference zu machen, einen Pointer zu übergeben:

C++:
void quadriere(int *a){*a*=*a;}

/*...*/

int x = 2;
quadriere(&x);


In C++ übergibt man eine Referenz:

C++:
void quadriere(int &a) { a*=a; }

//...

int x = 2;
quadriere(x);


Das macht im Grunde genau dasselbe, aber der Code wird dadurch übersichtlicher.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.07.2003, 15:59 Uhr
ao

(Operator)


Ich bau das mal schrittweise auf.

C++:
void f ()                       // Funktion drumherum, damit wir
                                // Code ausfuehren koennen.
{
    char Ch;                    // ein Buchstabe
    char * pCh;                 // ein (nicht-const) Zeiger auf einen Buchstaben
    pCh = &Ch;                  // Laufzeit-Zuweisung moeglich.

    char * const cpCh = &Ch;    // ein konstanter Zeiger auf einen Buchstaben
                                // Initialisierung muss sein wegen const.
                                // Laufzeit-Zuweisung ist nicht moeglich.

    *cpCh = 'x';                // Der Zeiger ist konstant, der Buchstabe nicht.

    char * const * pcpCh;       // ein Zeiger auf einen konstanten Zeiger ...
    pcpCh = &cpCh;              // Laufzeit-Zuweisung moeglich.
}



Daß man als Programmierer mit C-Erfahrung bei

C++:
char & rCh = IrgendeinChar;
rCh = 'x';

an

C++:
char *const cpCh = &IrgendeinChar;
*cpCh = 'x';

denkt, ist irgendwie natürlich und in Ordnung, meine ich. Solange man nicht vergißt, daß eine Referenz syntaktisch gesehen kein Zeiger ist.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.07.2003, 22:29 Uhr
~Peter_derAndere
Gast


Enschuldigt das ich hier so in Eurer Thread hineinplatze! Aber

(Hallo Uwe und alle anderen!)

das bin aber nicht ich (Peter) Nick-Name: Sascha! Sondern jemand anderer!
Ich glaube ich sollte mich anmelden und mir einen bestimmten Namen reservieren, damit keiner denkt, ich stelle hier "alle" Fragen, nur weil ich zufälligerweise auch Peter heiße!

Ich bitte nochmals vielmals um Entschuldigung! Ich bin auch schon wieder weg!...


Gruß
der andere Peter
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.07.2003, 22:54 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo "der andere"...
da ist wohl was falsch rüber gekommen . Peter sollte sich nur darüber äußern was er so eigentlich richtig machen wollte. . Das mit dem Anmelden ist keine schlechte Idee .
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.07.2003, 21:43 Uhr
~0xdeadbeef
Gast


Du könntest dir natürlich auch ein hinreichend originelles Pseudonym ausdenken, um Kollisionen zu vermeiden. Peter ist halt kein sonderlich seltener Name, und selbst wenn du dich als Peter anmeldest - naja, man wüsste zwar, dass ein Posting von dir kommt, wenn du eingeloggt bist (Ich geh mal davon aus, dass niemand versucht, das Forum zu cracken), aber wenn jemand anders kommt und als ~Peter (Gast) schreibt, wird man trotzdem vermuten, dass der Beitrag von dir kommt.
 
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: