Datentyp | C-Äquivalent | Beschreibung und Speicherverbrauch | Initialisierungswert | Wertebereich |
bool | - | Boolesche Werte | false | true, false |
byte | signed char | Vorzeichenbehaftet, 8 bit | 0 | -128 ... 127 |
ubyte | unsigned char | Vorzeichenlos, 8 bit | 0 | 0 ... 255 |
short | short | Vorzeichenbehaftet, 16 bit | 0 | -32.768 ... 32.767 |
ushort | unsigned short | Vorzeichenlos, 16 bit | 0 | 0 ... 65.535 |
int | int | Vorzeichenbehaftet, 32 bit | 0 | -2.147.483.648 ... 2.147.483.647 |
uint | unsigned int | Vorzeichenlos, 32 bit | 0 | 0 ... 4.294.967.295 |
long | long long | Vorzeichenbehaftet, 64 bit | 0L | -9.223.372.036.854.775.808 ... 9.223.372.036.854.775.807 |
ulong | unsigned long long | Vorzeichenlos, 64 bit | 0L | 0 ... 18.446.744.073.709.551.615 |
cent | - | Vorzeichenbehaftet, 128 bit (derzeit noch nicht aktiv) | 0 | -170.141.183.460.469.231.731.687.303.715.880.000.000 ... 170.141.183.460.469.231.731.687.303.715.880.000.099 |
ucent | - | Vorzeichenbehaftet, 128 bits (derzeit noch nicht aktiv) | 0 | 0 ... 340.282.366.920.938.463.463.374.607.431.770.000.000 |
float | float | Fließkommazahl, 32 bit | float.nan | 1.17549e-38 ... 3.40282e+38 |
double | double | Fließkommazahl, 64 bit | double.nan | 2.22507e-308 ... 1.79769e+308 |
real | long double | größte mögliche Zahl, die Hardware bereitstellen kann (z.B. 80 bit Größe für x86 CPUs) |
real.nan | Hardwareabhängig |
ifloat | float _Imaginary | Imaginäre Fließkommazahl | float.nan * 1.0i | Wie float |
idouble | double _Imaginary | Imaginäre Fließkommazahl | double.nan * 1.0i | Wie double |
ireal | long double _Imaginary | Imaginäre real | real.nan * 1.0i | Hardwareabhängig |
cfloat | float _Complex | Komplexes float | float.nan + float.nan * 1.0i | 1.17549e-38+1.17549e-38i ... 3.40282e+38+3.40282e+38i |
cdouble | double _Complex | Komplexes double | double.nan + double.nan * 1.0i | 2.22507e-308+2.22507e-308i ... 1.79769e+308+1.79769e+308i |
creal | long double _Complex | Komplexes real | real.nan + real.nan * 1.0i | Hardwareabhängig |
char | char | Vorzeichenlos, 8 bit UTF-8 | 0xFF | UTF-8 Zeichensatz |
wchar | wchar_t (sizeof(wchar_t) = 2) | Vorzeichenlos, 16 bit UTF-16 | 0xFFFF | UTF-16 Zeichensatz |
dchar | wchar_t (sizeof(wchar_t) = 4) | Vorzeichenlos, 32 bit UTF-32 | 0x0000FFFF | UTF-32 Zeichensatz |
// Ein einzeiliger Kommentar /* Ein mehrzeiliger Kommentar */ /+ // Ermöglicht verschachtelte Kommentare +/
/// Ein einzeiliger Dokumentationskommentar /** * Ein mehrzeiliger Kommentar, der in die Dokumentation eingeht */ /++ + Auch dies ist möglich +/
union U { int a; double b; } struct X { int a; int b; int c; int d = 7; }
// Stringkonkatenation in D für "Hallo Welt!" char[] string = "Hallo"; string ~= " Welt!"; // Assoziative Arrays int[char[]] groessen; groessen["Nowitzki"] = 213; groessen["Lahm"] = 170; writefln("Philipp Lahm ist %d gross.", groessen["Lahm"]); // Slicen eines Arrays int[] b; b = a[1..3]; // Im Array b sind nun bei 0 und 1 die Referenzen // auf die Elemente 1 und 2 im Array a enthalten // Kopieren eines Arrays bei bekannter Länge int[5] b; b[] = a[];
// Kopieren eines Arrays bei unbekannter Länge int[] b; b = a.dup;
// Hello World! in D import std.stdio; int main(char[][] args) { writefln("Hello World!"); return 0; }
// Standard: Call-by-Value (in) int add(int i) { i++; return i; } // Ueberladen float add(float i) { i--; return i; } // Referenzparameter void add_rf(inout int i) { i++; } // Referenzparameter als Zeiger void add_rfp(int * i) { (*i)++; } // Ausgabeparameter void add_out(int i, out int j) { i++; j = i; }
// Zeigerarithmetik mit Arrays in C for (j = 0; j < length; j++) { fprintf(stdout, "%d ", *a+j); } // Zeigerarithmetik mit Arrays in D for (j = 0; j < a.length; j++) { writefln(stdout, "%d ", *(cast(int*)a+j)); }
// Klassendefinition private class Trigonometrie { public real sinus (real i) { return sin(i); } } // Deklaration des Delegate real delegate(real) dg; // Instanz der Klasse bilden Trigonometrie t = new Trigonometrie(); // Zuweisen der Methode dg = &t.cosinus;