C C Verständnisproblem Strukturen

lordg2009

Lt. Commander
Dabei seit
Apr. 2009
Beiträge
1.344
Hi

Es geht mir um das Thema strukturen

Bsp:

Code:
struct name {
    int a;
    char b[20];
    double c;
} var;
Spreche ich eine Struktur an so mache ich das in diesem Beispiel zum Beispiel über

Code:
printf("Inhalt: %s\n", var.b);
Wozu brauche ich den jetzt den Code-Schnipsel, den ich in meinem Beispiel mit "name" betitelt habe.

Vielen Dank
 

WilliTheSmith

Lieutenant
Dabei seit
Dez. 2008
Beiträge
1.009
Das ist der Name der Struktur.

var ist nur eine Instanz dieser. Mit "struct name var2;" könntest du eine weitere Instanz dieser Struktur erstellen, welche beide unabhängig voneinander sind.

Gruß
 

DaysShadow

Commodore
Dabei seit
Jan. 2009
Beiträge
5.075
PHP:
struct name {
    int a;
    char b[20];
    double c;
}
Das ist die Deklaration des structs und das "var" danach nur eine optionale Komfortsache um direkt eine Variable davon zu erzeugen.
Würdest du das nicht tun müsstest du noch vor deinem printf schreiben:
PHP:
struct name var;
 

lordg2009

Lt. Commander
Ersteller dieses Themas
Dabei seit
Apr. 2009
Beiträge
1.344
OK, das habe ich begriffen, aber jetzt noch eine Frage:

Code:
struct name {
    int a;
    char b[20];
    double c;
} var1, var2;
In dem Fall würde die ganze Struktur doch zweimal deklariert und initialisiert werden und ich könnte mit

Code:
var1.a = 5;
var2.a = 10;
auch zwei verschiedene Werte zuweisen. Also schließe ich daraus, das immer wenn ich in meinem Programm etwas wie

Code:
struct name var_new;
einmal Speicher für die komplette Struktur angefordert wird. Somit würde das bedeuten, dass

Code:
struct name {
    int a;
    char b[20];
    double c;
};
Dieses Beispiel keinen Arbeitspeicher verbraucht (Auch wenn ich so natürlich nicht drauf zugreifen kann).
 

kinglouy

Lt. Commander
Dabei seit
Okt. 2004
Beiträge
1.175
Richtig, es wird jedesmal ein Speicherbereich auf dem Stack reserviert für ein struct.
 

lordg2009

Lt. Commander
Ersteller dieses Themas
Dabei seit
Apr. 2009
Beiträge
1.344
Danke euch, aber da die ganze Sache ein neues Hobby ist, fang ich lieber erst mal klein an. Und C ist echt ne spannende Sache, man lernt wirklich viel über die funktionsweise eines PCs.
 

Daaron

Fleet Admiral
Dabei seit
Dez. 2011
Beiträge
13.487
"Strukturen" sind doch gar nix ...
freu dich schon mal auf "Klassen".
Strukturen sind doch ne wunderbare Einstiegsdroge. Im Endeffekt ist eine Struktur nix anderes als eine Klasse, bei der alle Attribute Public sind und die außer Con- und Destructor keine Funktionen hat.
Structs können wirklich extrem Auswüchse annehmen, wenn die Attribute eines Structs wiederum andere Structs sind... Ab einem gewissen Komplexitätsgrad sieht man den Code vor lauter Mallocs nicht.

Eine hübsche Aufgabe ist es z.B. doppelt verkettete Listen als Struktur zu implementieren.
Ein Item einer Liste ist dann eine Struktur mit folgenden Attributen: dem Wert/Inhalt des Elements sowie 2 Pointer, jeweils fürs vorherige und nächste Element.
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Spoiler: Man kann auch mit Strukturen in C[1] objektorientiert programmieren, oder mit Listen in Lisp[2].

Man sollte nicht den selben Fehler, wie die alten Ägypter bei der Benennung der Geometrie
die Werkzeuge, die man benutzt, mit dem Kern der Arbeit, die man macht zu verwechseln.

€: Ich habe eine Tendenz, falsch rüberzukommen, deshalb als Ergänzung:

Ich will hier niemandem vorwerfen, etwas falsches erzählt zu haben. Wollte nur die Gelegen-
heit ergreifen, Anreize zum Über-den-Tellerrand-blicken zu geben. Wenn jemand einmal in
eine Situation kommt, in der er keine Sprache zur Hand hat, die einem die gewohnten Werk-
zeuge (zb Klassen) in die Hand gibt, lohnt es sich, zu wissen, wie man die Arbeit trotzdem
mit einer bekannten Methode (z.B. objektorientierte Programmierung) erledigen kann.

Für mich selbst war es zum Beispiel eine interessante Erfahrung, einen Garbage Collector
in C zu schreiben. Vielleicht auch etwas, das man nicht sofort erwartet :3
 
Zuletzt bearbeitet:

mastertier79

Commander
Dabei seit
Juli 2010
Beiträge
2.792
Zuletzt bearbeitet:

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Schon klar ;) C++ ist angesagt ...
Vererbung, Klassen und Co. machen den Unterschied.
Strukturen sind halt nur begrenzt und umständlich erweiterbar.
Klassen sind aber das wirklich wahre mächtige Werkzeug der Programmierung ...
Das verschlägt mir die Sprache.
Vielleicht solltest du das Überdentellerrandgucken, von dem ich sprach, deutlich wörtlicher nehmen, als ich das gemeint habe.
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Alles klar. Immer diese Race Conditions :O

Wünsche dann eine gute Nacht.
 
Top