C C Verständnisproblem Strukturen

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.503
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
 
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ß
 
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 schrieb:
Hi


Wozu brauche ich den jetzt den Code-Schnipsel, den ich in meinem Beispiel mit "name" betitelt habe.

Meinst Du jetzt wozu die Struktur einen Namen braucht?
Gar nicht, nennt sich dann anonyme Struktur.
 
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).
 
Richtig, es wird jedesmal ein Speicherbereich auf dem Stack reserviert für ein struct.
 
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.
 
mastertier79 schrieb:
"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.
 
Daaron schrieb:
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 auch member functions haben. In C++ sind struct und class bis auf den default access modifier äquivalent.
 
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:
"Strukturen" sind doch gar nix ...
freu dich schon mal auf "Klassen".
Aber sicher nicht in C.

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 ...
 
Zuletzt bearbeitet:
mastertier79 schrieb:
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.
 
Alles klar. Immer diese Race Conditions :O

Wünsche dann eine gute Nacht.
 
Zurück
Oben