 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Timur Ametov Guest
|
Posted: Thu Apr 20, 2006 4:30 pm Post subject: Struct und Pointer dadrin |
|
|
Ich weiss, etwas blöde Frage, aber mein Kopf will das nicht so richtig
verstehen. Kann mir vielleicht jemand helfen?
Also, ich habe:
typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
cdSClose* close;
cdSRead* read;
cdSWrite* write;
cdSSeek* seek;
cdSTell* tell;
} cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die mit
einem Zeiger beschrieben sind?
cdStream MyStream;
MyStream->open oder (MyStream*).Open?
Danke
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Christoph Kliemt Guest
|
Posted: Thu Apr 20, 2006 8:07 pm Post subject: Re: Struct und Pointer dadrin |
|
|
"Timur Ametov" <external.timur.ametov (AT) de (DOT) bosch.com> writes:
[...]
| Quote: | typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
cdSClose* close;
cdSRead* read;
cdSWrite* write;
cdSSeek* seek;
cdSTell* tell; } cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die
mit einem Zeiger beschrieben sind?
cdStream MyStream;
|
Das ist kein Zeiger, also mit MyStream.open;
| Quote: | MyStream->open oder (MyStream*).Open?
|
Das wäre dann:
cdStream* MyStream;
MyStream -> open oder (*MyStream).open
btw: willst Du dich bei Gelegenheit mal mit den Grundlagen der Sprache
befassen?
bis denne,
Christoph
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Thomas Koller Guest
|
Posted: Thu Apr 20, 2006 8:07 pm Post subject: Re: Struct und Pointer dadrin |
|
|
In de.comp.lang.c Timur Ametov <external.timur.ametov (AT) de (DOT) bosch.com> wrote:
| Quote: | Ich weiss, etwas blöde Frage, aber mein Kopf will das nicht so richtig
verstehen. Kann mir vielleicht jemand helfen?
Also, ich habe:
typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
cdSClose* close;
cdSRead* read;
cdSWrite* write;
cdSSeek* seek;
cdSTell* tell;
} cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die mit
einem Zeiger beschrieben sind?
cdStream MyStream;
MyStream->open oder (MyStream*).Open?
|
MyStream.open
Tom
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Erich Fruehstueck Guest
|
Posted: Thu Apr 20, 2006 8:07 pm Post subject: Re: Struct und Pointer dadrin |
|
|
"Timur Ametov" <external.timur.ametov (AT) de (DOT) bosch.com> wrote:
| Quote: | Ich weiss, etwas blöde Frage, aber mein Kopf will das nicht so richtig
verstehen. Kann mir vielleicht jemand helfen?
Also, ich habe:
typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
cdSClose* close;
cdSRead* read;
cdSWrite* write;
cdSSeek* seek;
cdSTell* tell;
} cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die mit
einem Zeiger beschrieben sind?
cdStream MyStream;
MyStream->open oder (MyStream*).Open?
|
MyStream.open
Erich
--
The next version of EFEU is coming soon.
Get the open source from http://efeu.cybertec.at.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Claus Reibenstein Guest
|
Posted: Fri Apr 21, 2006 10:33 am Post subject: Re: Struct und Pointer dadrin |
|
|
Timur Ametov schrieb:
| Quote: | Also, ich habe:
typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
[...]
} cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die mit
einem Zeiger beschrieben sind?
cdStream MyStream;
MyStream->open oder (MyStream*).Open?
|
Kommt darauf an, wie MyStream definiert ist. Wenn MyStream eine Variable
vom Typ cdStream ist, dass mit MyStream.open. Ist MyStream ein Zeiger
auf eine solche Struktur, dann mit MyStream->open.
Oder wolltest Du auf die Daten zugreifen, auf die open zeigt? Nun, dann
muss es *MyStream.open bzw. *MyStream->open heißen.
Dem Kommentar nach zu urteilen, zeigen die Pointer jedoch auf Funktionen
(geht aus der Definition nicht hervor, da die Definition von cdSOpen
unbekannt ist). Diese Funktionen kannst Du dann direkt aufrufen mit
MyStream.open(...) bzw. MyStream->open(...).
HTH
Gruß. Claus
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Timur Ametov Guest
|
Posted: Fri Apr 21, 2006 11:27 am Post subject: Re: Struct und Pointer dadrin |
|
|
| Quote: | typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
cdSClose* close;
cdSRead* read;
cdSWrite* write;
cdSSeek* seek;
cdSTell* tell; } cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die
mit einem Zeiger beschrieben sind?
cdStream MyStream;
Das ist kein Zeiger, also mit MyStream.open;
MyStream->open oder (MyStream*).Open?
Das wäre dann:
cdStream* MyStream;
MyStream -> open oder (*MyStream).open
btw: willst Du dich bei Gelegenheit mal mit den Grundlagen der Sprache
befassen?
|
Das mache ich. Aber ich habe die Antwort in keinem mir zu Verfügung
stehender Bücher gefunden.
Und noch was, die Kollegen von englischer NG haben eigentlich empfohlen so
zu schreiben *(MyStream.Open) Jetzt bin noch mehr verzweifelt :(
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Martin Kaul Guest
|
Posted: Fri Apr 21, 2006 11:27 am Post subject: Re: Struct und Pointer dadrin |
|
|
Timur Ametov wrote:
| Quote: | Ich weiss, etwas blöde Frage, aber mein Kopf will das nicht so richtig
verstehen. Kann mir vielleicht jemand helfen?
Also, ich habe:
typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
cdSClose* close;
cdSRead* read;
cdSWrite* write;
cdSSeek* seek;
cdSTell* tell;
} cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die mit
einem Zeiger beschrieben sind?
cdStream MyStream;
MyStream->open oder (MyStream*).Open?
|
hmm, dein Beispiel hat mit Zeigern eigentlich nichts zu tun.
Zeiger sind erst mal ganz normale Variablen, die ganz normal verwendet
werden, wie Variablen "normaler" Datentypen (z.B. int, double) halt.
Der Unterschied in der Verwendung tritt erst dann auf, wenn du auf *den*
Inhalt zugreifen willst, auf den der Zeiger zeigt. Der Zeiger aber an
sich ist ne normale Variable.
In deinem Beispiel ist MyStream eine Instanz der Klasse cdStream, d.h.
kein Zeiger auf eine Instanz von cdStream, sondern die Instanz selbst
(das Elemente von MyStream wiederrum Zeiger sind, ist in diesem
Zusammenhang unerheblich).
Wenn du auf Elemente der Instanz zugreifen willst, dann verwendest du
den "." operator, d.h. der Zugriff auf das Element "open" der Instanz
"MyStream" ist "MyStream.open".
Wenn MyStream ein Zeiger auf eine Instanz von cdStream wäre, dann
müsstes du über den "->" operator auf Elemente der Instanz zugreifen und
dann würde oben in deinem Beispiel folgendes stehen:
cdStream *MyStream = new cdStream;
MyStream->open = .....
tschaule
Martin
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Jens Müller Guest
|
Posted: Sun Apr 23, 2006 3:51 pm Post subject: Re: Struct und Pointer dadrin |
|
|
Timur Ametov schrieb:
| Quote: | typedef struct {
cdSOpen* open;
[..] } cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die
mit einem Zeiger beschrieben sind?
cdStream MyStream;
Das ist kein Zeiger, also mit MyStream.open;
MyStream->open oder (MyStream*).Open?
Das wäre dann:
cdStream* MyStream;
MyStream -> open oder (*MyStream).open
[...]
Und noch was, die Kollegen von englischer NG haben eigentlich empfohlen so
zu schreiben *(MyStream.Open) Jetzt bin noch mehr verzweifelt :(
|
Wieso? Kommt halt drauf an, was Du machen willst.
MyStream.open st ein cdSOpen*, *(MyStream.open) ein csdOpen.
Der * (Dereferenzierung) bindet stärker als . (Member-Zugriff), also
sind die Klammern nötig, da Du open dereferenzieren willst und nicht
MyStream.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Thomas Koller Guest
|
Posted: Sun Apr 23, 2006 4:08 pm Post subject: Re: Struct und Pointer dadrin |
|
|
In de.comp.lang.c Claus Reibenstein <c.reibenstein (AT) email (DOT) de> wrote:
| Quote: | typedef struct {
cdContext contextH;
/* stream I/O function pointers */
cdSOpen* open;
[...]
} cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die mit
einem Zeiger beschrieben sind?
cdStream MyStream;
MyStream->open oder (MyStream*).Open?
Kommt darauf an, wie MyStream definiert ist.
|
Wieso, die Definition steht doch oben?
| Quote: | Wenn MyStream eine Variable
vom Typ cdStream ist, dass mit MyStream.open.
|
Genau.
| Quote: | Ist MyStream ein Zeiger
auf eine solche Struktur, dann mit MyStream->open.
|
Wie kommst du auf Zeiger?
Tom
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Claus Reibenstein Guest
|
Posted: Mon Apr 24, 2006 3:49 pm Post subject: Re: Struct und Pointer dadrin |
|
|
Thomas Koller schrieb:
| Quote: | In de.comp.lang.c Claus Reibenstein <c.reibenstein (AT) email (DOT) de> wrote:
Kommt darauf an, wie MyStream definiert ist.
Wieso, die Definition steht doch oben?
|
Sorry, hatte ich glatt übersehen.
| Quote: | Wie kommst du auf Zeiger?
|
Folgefehler.
Noch etwas habe ich übersehen, aber nicht nur ich, sondern alle, die
sich bislang an diesem Thread bisher beteiligten: wir crossposten
fröhlich nach <news:de.comp.lang-iso-c++> :-(
Ich habe mal ein fup2 dclc gesetzt.
Gruß. Claus
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Jens Müller Guest
|
Posted: Mon Apr 24, 2006 4:31 pm Post subject: Re: Struct und Pointer dadrin |
|
|
Jens Müller schrieb:
| Quote: | Und noch was, die Kollegen von englischer NG haben eigentlich empfohlen so
zu schreiben *(MyStream.Open) Jetzt bin noch mehr verzweifelt :(
Wieso? Kommt halt drauf an, was Du machen willst.
MyStream.open st ein cdSOpen*, *(MyStream.open) ein csdOpen.
Der * (Dereferenzierung) bindet stärker als . (Member-Zugriff), also
sind die Klammern nötig, da Du open dereferenzieren willst und nicht
MyStream.
|
Achja: Wenn open jetzt wieder eine struct sein sollte, müßte
MyStream.open->irgendwas auf ein Member zugreifen, oder?
Fände ich dann doch deutlich leichter lesbar *(MyStream.open).irgendwas
(hier sieht man im übrigen, daß es ganz gut ist, daß * stärker bindet -
(*(MyStream.open)).irgendwas ist nun wirklich häßlich ...
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Tue Apr 25, 2006 10:06 am Post subject: Re: Struct und Pointer dadrin |
|
|
Jens Müller wrote:
| Quote: | Timur Ametov schrieb:
typedef struct {
cdSOpen* open;
[..] } cdStream;
Wie kann ich dann auf die Eigenschaften dieser Struct zugreifen, die
mit einem Zeiger beschrieben sind?
cdStream MyStream;
Das ist kein Zeiger, also mit MyStream.open;
MyStream->open oder (MyStream*).Open?
Das wäre dann:
cdStream* MyStream;
MyStream -> open oder (*MyStream).open
[...]
Und noch was, die Kollegen von englischer NG haben eigentlich empfohlen so
zu schreiben *(MyStream.Open) Jetzt bin noch mehr verzweifelt :(
Wieso? Kommt halt drauf an, was Du machen willst.
MyStream.open st ein cdSOpen*, *(MyStream.open) ein csdOpen.
Der * (Dereferenzierung) bindet stärker als .
(Member-Zugriff), also sind die Klammern nötig, da Du open
dereferenzieren willst und nicht MyStream.
|
Gar nicht. »*MyStream.open« und »*(MyStream.open)« sind vollig
identischr. Für den Compiler, in jedem Fall; ich finde es auch
sinnvoll, Klammern hier einzusetzen, um sicher zu sein, dass man
bekommt, was man haben will, und dass derjenige, der es liest,
sieht auch auf Anhieb, was man bekommt.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|