C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Struct und Pointer dadrin

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Timur Ametov
Guest





PostPosted: Thu Apr 20, 2006 4:30 pm    Post subject: Struct und Pointer dadrin Reply with 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?

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





PostPosted: Thu Apr 20, 2006 8:07 pm    Post subject: Re: Struct und Pointer dadrin Reply with quote



"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





PostPosted: Thu Apr 20, 2006 8:07 pm    Post subject: Re: Struct und Pointer dadrin Reply with quote



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





PostPosted: Thu Apr 20, 2006 8:07 pm    Post subject: Re: Struct und Pointer dadrin Reply with quote

"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





PostPosted: Fri Apr 21, 2006 10:33 am    Post subject: Re: Struct und Pointer dadrin Reply with quote

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





PostPosted: Fri Apr 21, 2006 11:27 am    Post subject: Re: Struct und Pointer dadrin Reply with quote

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





PostPosted: Fri Apr 21, 2006 11:27 am    Post subject: Re: Struct und Pointer dadrin Reply with quote

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





PostPosted: Sun Apr 23, 2006 3:51 pm    Post subject: Re: Struct und Pointer dadrin Reply with quote

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





PostPosted: Sun Apr 23, 2006 4:08 pm    Post subject: Re: Struct und Pointer dadrin Reply with quote

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





PostPosted: Mon Apr 24, 2006 3:49 pm    Post subject: Re: Struct und Pointer dadrin Reply with quote

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





PostPosted: Mon Apr 24, 2006 4:31 pm    Post subject: Re: Struct und Pointer dadrin Reply with quote

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





PostPosted: Tue Apr 25, 2006 10:06 am    Post subject: Re: Struct und Pointer dadrin Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.