Forum: Compiler & IDEs Unterschied zwischen struct.bla und struct->bla?


von J. T. (chaoskind)


Lesenswert?

MoinMoin

ich bastel grad ein wenig mit dem Standardlibs von ST fürs 
STM32F429Disko und stelle fest, dass die ihre structs mit das die ihre 
Variablen in den structs per Structname->Variablenname ansprechen, ich 
meine aber mit Structname.Variablenname anspreche.

Gibt es einen Unterschied zwischen den beiden Varianten, und falls ja, 
welcher ist das? Auch eine Googlesuche brachte mich nicht wirklich 
weiter...
Ich kann Google scheinbar nicht verständlich machen was ich suche... 
Zumindest mit "Unterschied zwischen . und -> in c" führt alles nur zu 
Unterschied zwischen C und C++...

MfG Chaos

von Rolf M. (rmagnus)


Lesenswert?

j. t. schrieb:
> Gibt es einen Unterschied zwischen den beiden Varianten, und falls ja,
> welcher ist das?

-> dereferenziert einen Zeiger, . tut das nicht.

> Auch eine Googlesuche brachte mich nicht wirklich weiter...

Ein C-Buch würde dich weiterbringen. Das ist nämlich Grundlagenwissen.

von J. T. (chaoskind)


Lesenswert?

Danke dir für die schnelle Antwort =)

d.h. mit -> brauch ich meine structs nicht mehr Global anlegen, sondern 
kann sie dann per Zeiger ansprechen?

von Peter II (Gast)


Lesenswert?

j. t. schrieb:
> d.h. mit -> brauch ich meine structs nicht mehr Global anlegen, sondern
> kann sie dann per Zeiger ansprechen?

nein

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

»foo->bar« ist eine alternative Schreibweise für »(*foo).bar«, nicht
mehr und nicht weniger.

von operator (Gast)


Lesenswert?

Schau dir das Konzept der Zeiger an, wann und warum man diese einsetzt. 
Genau darum geht es hier nämlich.

von B. S. (bestucki)


Lesenswert?

Beispiel:
1
typedef struct{
2
  int value;
3
}MyStruct;
4
5
void foo(MyStruct * A){
6
  MyStruct B;
7
  
8
  A->value = 5;
9
  B.value = 10;
10
}

von Peter D. (peda)


Lesenswert?

Die Zeigerform nimmt man gerne für IO-Register.
Diese dürfen ja nicht im RAM angelegt werden, sondern existieren schon 
an ganz bestimmten Adressen.
Im io.h-File castet man dann die Adresse als Zeiger auf das IO-Register.

Die Member-Form nimmt man für echte Variablen im RAM.

von Simon K. (simon) Benutzerseite


Lesenswert?

Also wirklich Peter. Die Zeigerform nimmt man auch für "echte Variablen 
im RAM".

von J. T. (chaoskind)


Lesenswert?

Nun ist einiges klarer, Danke euch für die Antworten! =)

MfG Chaos

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.