Forum: Mikrocontroller und Digitale Elektronik Suche Suchbegriff, C "->"


von Martin K. (dschadu)


Lesenswert?

Hi,
ich würde gerne Google bemühen, allerdings Ignoriert google irgendwie 
das "->" in der Suche. Ich weiß auch leider nicht wie ich das nennen 
oder Umschreiben soll, jemand eine Idee, Link, oder gar Erklärung?

Da ich in letzter Zeit öfters drauf gestoßen bin, kann ichs wohl 
nichtmehr ganz ignorieren. Ich bin kein totaler Anfänger in C, kann 
schon nen bisl was, aber bei sowas haperts dann doch noch.

Konkretes Beispiel, Auszug aus der aktuellen USB LUFA der RingBuffer.h:
1
    static inline void RingBuffer_InitBuffer(RingBuffer_t* Buffer, uint8_t* const DataPtr, const uint16_t Size)
2
    {
3
      GCC_FORCE_POINTER_ACCESS(Buffer);
4
5
      uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask();
6
      GlobalInterruptDisable();
7
  
8
      Buffer->In     = DataPtr;
9
      Buffer->Out    = DataPtr;
10
      Buffer->Start  = &DataPtr[0];
11
      Buffer->End    = &DataPtr[Size];
12
      Buffer->Size   = Size;
13
      Buffer->Count  = 0;
14
15
      SetGlobalInterruptMask(CurrentGlobalInt);
16
    }

danke schonmal!


edit: Sorry, währe wohl besser in GCC aufgehoben gewesen.
von (prx) A. K. (prx)


Lesenswert?

Und was war nochmal die Frage?
von Sebastian (Gast)


Lesenswert?

Martin K. schrieb:
> ich würde gerne Google bemühen, allerdings Ignoriert google irgendwie
> das "->" in der Suche. Ich weiß auch leider nicht wie ich das nennen
> oder Umschreiben soll, jemand eine Idee, Link, oder gar Erklärung?

Vergleiche 
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Member_and_pointer_operators. 
Der Operator "->" wird u.a. als "structure dereference" bezeichnet.
von Martin K. (dschadu)


Lesenswert?

Super, danke für die flotte Antwort!
von tritratroll (Gast)


Lesenswert?

A. K. schrieb:
> Und was war nochmal die Frage?

Was bedeutet "->"?

Ist eine andere Schreibweise um mittels Pointer auf Strukturen 
zuzugreifen:
1
typedef struct 
2
{
3
  int a;
4
  int b;
5
} mystruct_t;
6
7
mystruct_t structur, *pointer;
8
9
pointer=&structur;
10
11
//gleichbedeutend
12
structur->a=1;
13
(*structur).a=1;
von Sebastian (Gast)


Lesenswert?

A. K. schrieb:
> Und was war nochmal die Frage?

Angenommen, die Frage lautet "Was tut dieser Operator '->'?"

Dann wäre eine Antwort: Er löst den linken Operanden, einen Zeiger auf 
eine Struktur (oder Klasse) auf, und sucht das Attribut bzw. die 
Methode, die durch den rechten Operanden beschrieben wird.

Im Prinzip (von Überladung etc. abgesehen) ist "a->b" gleichbedeutend 
mit "(*a).b".

Im ursprünglichen Beispiel ist "Buffer" ein Zeiger auf eine Struktur vom 
Typ "RingBuffer_t". Die Zugriffe mit "->" ersparen das explizite 
Dereferenzieren mittels "*Buffer". Anstelle von
1
      Buffer->In     = DataPtr;
2
      Buffer->Out    = DataPtr;
3
      Buffer->Start  = &DataPtr[0];
4
      Buffer->End    = &DataPtr[Size];
5
      Buffer->Size   = Size;
6
      Buffer->Count  = 0;
könnte man hier (höchstwahrscheinlich) auch
1
      (*Buffer).In     = DataPtr;
2
      (*Buffer).Out    = DataPtr;
3
      (*Buffer).Start  = &DataPtr[0];
4
      (*Buffer).End    = &DataPtr[Size];
5
      (*Buffer).Size   = Size;
6
      (*Buffer).Count  = 0;
schreiben. Das ist aber insbesondere durch die nötige Klammerung etwas 
sperriger als mit "->".
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

"Buffer" ist ein Zeiger auf eine Variable vom Typ "RingBuffer_t"

Buffer.In kann nicht geschrieben werden, da "Buffer" nur ein Zeiger ist.

Daher muss

Buffer->In

geschrieben werden.


RingBuffer_t BufferVar;  // Definition Variable und Speicher
Buffer = &BufferVar;     // Zeiger auf die Variable

BufferVar.In == Buffer->In; // Beides zeigt auf die gleiche 
Speicheradresse
von Sebastian Hepp (Gast)


Lesenswert?

Falls doch noch der Name des Operators interessiert: "Pfeiloperator".
von Karl H. (kbuchegg)


Lesenswert?

> Da ich in letzter Zeit öfters drauf gestoßen bin, kann ichs wohl
> nichtmehr ganz ignorieren. Ich bin kein totaler Anfänger in C,
> kann schon nen bisl was, aber bei sowas haperts dann doch noch.

Dann solltest du ganz schnell ein paar Euros investieren und dir bei 
Amazon ein C-Buch kaufen. Du wirst schnell merken, dass dieser Operator 
auf ungefähr 70% alles Seiten vorkommt. Wenn du den also noch nicht 
kennst, dann kennst du vieles von C noch nicht, was du eigentlich kennen 
solltest.
von hp-freund (Gast)


Lesenswert?

von Vladimir (Gast)


Lesenswert?

Die Wahrscheinlichkeit, dass bei einer C-Frage auf ein C-Buch verwiesen 
wird liegt bei 140%.
von Karl H. (kbuchegg)


Lesenswert?

Vladimir schrieb:
> Die Wahrscheinlichkeit, dass bei einer C-Frage auf ein C-Buch verwiesen
> wird liegt bei 140%.

Kommt halt immer auf die Frage an :-)

Wenn die Frage eines Autofahrers lautet:
Welches ist die Bedeutung der anderen beiden Pedale im Fussraum des 
Fahrers?

wird man ihn als aktiven Autofahrer auch daran erinnern, doch bitte mal 
eine Fahrschule aufzusuchen und ein paar Stunden zu nehmen. Dort lernt 
er dann auch, wie man den 2. Gang einlegt und was es mit dem Bremsen so 
auf sich hat. Was dann wiederrum die Zahl der Dellen in seiner 
Garagenwand extrem verringert.

Oder wie würdest du mit jemanden verfahren, der dich in Mathematik beim 
Thema Differenzieren fragt: Wie war das nochmal mit dem Multiplizieren 
und Klammern auflösen?
von Rolf M. (rmagnus)


Lesenswert?

Vladimir schrieb:
> Die Wahrscheinlichkeit, dass bei einer C-Frage auf ein C-Buch verwiesen
> wird

... ist ziemlich genau so groß wie die, daß es sich dabei um eine 
absolute Grundlagenfrage handelt, die in jedem C-Buch in einem der 
ersten Kapitel beantwortet wird.
von Mark B. (markbrandis)


Lesenswert?

Martin K. schrieb:
> Hi,
> ich würde gerne Google bemühen, allerdings Ignoriert google irgendwie
> das "->" in der Suche.

Das ist leider eine grundsätzliche Krankheit bei Suchmaschinen. Manchmal 
wäre es absolut sinnvoll, wenn man nach Interpunktions- und 
Sonderzeichen suchen könnte. Auch und gerade wenn es um 
Programmiersprachen geht.
von Martin K. (dschadu)


Lesenswert?

Danke für die Ergänzenden Beiträge!

Und jeder fängt halt mal klein an, bisher bin ich btw sehr gut nur mit 
Gaspedal gefahren :D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.