Syntax ·
Variablen ·
Datentypen ·
Operatoren ·
Funktionen ·
Zeiger
C ist eine der einflussreichsten Programmiersprachen – die Grundlage für Betriebssysteme, Embedded-Systeme und viele andere Sprachen. Diese Grundlagen sind der Einstieg in die C-Programmierung.
C-Syntax ist die Grundlage vieler moderner Sprachen. Jede Anweisung endet mit einem Semikolon ;, Codeblöcke werden mit {} umschlossen. main() ist der Einstiegspunkt jedes C-Programms.
| Regel | Beschreibung |
|---|---|
| // | Einzeiliger Kommentar (C99+) |
| /* ... */ | Mehrzeiliger Kommentar |
| ; | Semikolon beendet jede Anweisung |
| {} | Geschweifte Klammern definieren Codeblöcke |
| #include | Header-Dateien einbinden |
| case-sensitiv | C unterscheidet zwischen Groß- und Kleinschreibung |
main()-Funktion. Der Rückgabewert 0 signalisiert dem Betriebssystem, dass das Programm erfolgreich beendet wurde.
Variablen in C müssen vor der Verwendung deklariert werden – mit Angabe des Datentyps. C ist statisch typisiert: der Typ einer Variable kann sich nicht ändern.
| Regel | Beschreibung |
|---|---|
| Buchstaben, Ziffern, _ | Erlaubte Zeichen (keine Sonderzeichen) |
| Nicht mit Ziffer | Name darf nicht mit einer Zahl beginnen |
| Groß-/Kleinschreibung | C unterscheidet zwischen Groß- und Kleinschreibung |
| Reservierte Wörter | Nicht verwenden: int, float, if, for, while, etc. |
| Konventionen | snake_case oder camelCase (je nach Projekt) |
Datentypen definieren, welche Werte eine Variable annehmen kann und wie viel Speicher sie belegt. C ist eine statisch typisierte Sprache mit festen Speichergrößen.
| Typ | Größe (typisch) | Wertebereich | Beispiel |
|---|---|---|---|
| char | 1 Byte | -128 bis 127 | char c = 'A'; |
| int | 4 Byte | -2.147.483.648 bis 2.147.483.647 | int x = 42; |
| short | 2 Byte | -32.768 bis 32.767 | short s = 1000; |
| long | 8 Byte (64-bit) | -9.2e18 bis 9.2e18 | long l = 123456789L; |
| float | 4 Byte | ~1.2e-38 bis ~3.4e38 | float f = 3.14f; |
| double | 8 Byte | ~2.2e-308 bis ~1.8e308 | double d = 3.14159; |
| unsigned | wie int | 0 bis 4.294.967.295 | unsigned int u = 100; |
sizeof(), um die tatsächliche Größe zur Laufzeit zu ermitteln.
Operatoren führen Berechnungen und Vergleiche durch. C bietet arithmetische, Vergleichs-, logische und bitweise Operatoren.
| Kategorie | Operatoren | Beispiel |
|---|---|---|
| Arithmetik | +, -, *, /, % | 10 % 3 = 1 |
| Vergleich | ==, !=, <, >, <=, >= | 5 > 3 = 1 (true) |
| Logik | &&, ||, ! | (5 > 3) && (2 < 4) = 1 |
| Zuweisung | =, +=, -=, *=, /=, %= | x += 5 → x = x + 5 |
| Inkrement/Dekrement | ++, -- | i++ → i = i + 1 |
| Bitweise | &, |, ^, ~, <<, >> | 5 & 3 = 1 |
int-Werte wird das Ergebnis abgeschnitten (Ganzzahldivision). Für Gleitkommadivision muss mindestens ein Operand float oder double sein.
Funktionen sind wiederverwendbare Codeblöcke. Sie können Parameter entgegennehmen und Werte mit return zurückgeben. void bedeutet, dass keine Rückgabe erfolgt.
| Art | Beschreibung | Beispiel |
|---|---|---|
| Mit Rückgabewert | Gibt einen Wert zurück | int add(int a, int b) { return a + b; } |
| Ohne Rückgabewert | Führt Aktionen aus | void print(int x) { printf("%d", x); } |
| Mit Parametern | Nimmt Werte entgegen | int max(int a, int b) { ... } |
| Ohne Parameter | Nimmt keine Werte entgegen | int random() { ... } |
| Prototyp | Deklaration vor main() | int add(int a, int b); |
main() (Prototyp), damit der Compiler sie kennt. Ohne Prototyp benötigen Sie die vollständige Definition vor dem Aufruf.
Zeiger (Pointer) sind Variablen, die Speicheradressen speichern. Sie sind eines der mächtigsten und gleichzeitig anspruchsvollsten Konzepte in C. & holt die Adresse, * dereferenziert einen Zeiger.
| Syntax | Beschreibung | Beispiel |
|---|---|---|
| int *ptr; | Zeiger auf int deklarieren | Zeiger auf Ganzzahl |
| &variable | Adresse von variable | &x → Adresse von x |
| *ptr | Dereferenzierung (Wert an der Adresse) | *ptr = 42; |
| NULL | Nullzeiger (zeigt auf nichts) | int *ptr = NULL; |
| malloc(size) | Dynamischer Speicher (Heap) | int *arr = malloc(10 * sizeof(int)); |
| free(ptr) | Speicher freigeben | free(arr); |
free() freizugeben – sonst entsteht ein Speicherleck. Setzen Sie Zeiger nach free() auf NULL, um doppelte Freigaben zu vermeiden.
;
int x = 5;
sizeof
+ - * /
return
* &
#include <stdio.h> ·
int main() { printf("Hallo"); return 0; } ·
int *ptr = &x;