mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
added user defined types and structs
This commit is contained in:
parent
b8d10209a6
commit
a0d2ed81ae
@ -630,3 +630,56 @@ void test_funktion(){
|
|||||||
// initialisiert werden.
|
// initialisiert werden.
|
||||||
// Es ist auch möglich, Funktionen als statisch zu deklarieren, damit diese
|
// Es ist auch möglich, Funktionen als statisch zu deklarieren, damit diese
|
||||||
// `private` sind. Private heisst, dass sie nur in diesem Kontekt sichtbar sind.
|
// `private` sind. Private heisst, dass sie nur in diesem Kontekt sichtbar sind.
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////
|
||||||
|
// Benutzerdefinierte Typen und Strukturen (Structs)
|
||||||
|
////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// `typdef`s können verwendet werden, um Typenaliase zu erstellen.
|
||||||
|
typedef int mein_typ;
|
||||||
|
mein_typ meine_typ_var = 0;
|
||||||
|
|
||||||
|
// Structs sind lediglich Sammlungen von Daten, die Inhalte werden
|
||||||
|
// (in der Reihenfolge wie sie geschrieben wurden) sequentiell alloziert.
|
||||||
|
struct rechteck{
|
||||||
|
int breite;
|
||||||
|
int hoehe;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Allgemein ist es nicht so, dass folgender Ausdruck wahr ist.
|
||||||
|
// sizeof(struct rechteck) == sizeof(int) + sizeof(int)
|
||||||
|
// Dies ist so, weil potentiell ein Padding zwischen den Struktur-Inhalten
|
||||||
|
// möglich ist). siehe [1]
|
||||||
|
|
||||||
|
void funktion_1(){
|
||||||
|
struct rechteck mein_rechteck;
|
||||||
|
|
||||||
|
// Greife auf Struct-Inhalte mit `.` zu.
|
||||||
|
mein_rechteck.breite = 10;
|
||||||
|
mein_rechteck.hoehe = 20;
|
||||||
|
|
||||||
|
// Du kannst Pointer zu Structs deklarieren.
|
||||||
|
struct rechteck *mein_rechteck_ptr = &mein_rechteck;
|
||||||
|
|
||||||
|
// Verwende Dereferenzierung, um Struct-Inhalte zu bearbeiten
|
||||||
|
(*mein_rechteck_ptr).breite = 30;
|
||||||
|
|
||||||
|
//Noch besser: Verwende die Kurzschreibweise ->, um die Lesbarkeit zu verbessern.
|
||||||
|
mein_rechteck_ptr->hoehe = 10; // Das gleiche wie: (*mein_rechteck_ptr).hoehe = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aus Bequemlichkeitsgründen ist es möglich einem `struct` ein `typedef`hinzuzufügen.
|
||||||
|
typedef struct rechteck recht;
|
||||||
|
|
||||||
|
int flaeche(recht r){
|
||||||
|
return r.breite * r.hoehe;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wenn du grosse Structs hast, kannst du diese mit dem Pointer kopieren,
|
||||||
|
// damit grosse Kopiervorgänge vermieden werden.
|
||||||
|
int flaecheptr(const recht *r){
|
||||||
|
return r->breite * r->hoehe;
|
||||||
|
}
|
||||||
|
|
||||||
|
[1] [Why isn't sizeof for a struct equal to the sum of sizeof of each member?](http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member)
|
||||||
|
Loading…
Reference in New Issue
Block a user