Variablen in C verstehen: Typen, Benennungsregeln & Speicherverwaltung
Eine Variable ist nichts anderes als ein Name für einen Speicherbereich, den unsere Programme manipulieren können. Jede Variable in C hat einen spezifischen Typ, der die Größe und das Layout des Variablenspeichers bestimmt; den Wertebereich, der in diesem Speicher gespeichert werden kann; und die Menge der Operationen, die auf die Variable angewendet werden können.
Der Name einer Variable kann aus Buchstaben, Ziffern und dem Unterstrichzeichen bestehen. Er muss mit einem Buchstaben oder einem Unterstrich beginnen. Groß- und Kleinbuchstaben sind unterschiedlich, da C case-sensitive ist. Basierend auf den im vorherigen Kapitel erklärten Grundtypen gibt es folgende grundlegende Variablentypen:
| Nr. | Typ & Beschreibung |
|---|---|
| 1 | char – Typischerweise ein einzelnes Oktett (ein Byte). Ein ganzzahliger Typ. |
| 2 | int – Die natürlichste Ganzzahlgröße für die Maschine. |
| 3 | float – Ein Single-Precision-Gleitkommawert. |
| 4 | double – Ein Double-Precision-Gleitkommawert. |
| 5 | void – Repräsentiert die Abwesenheit eines Typs. |
C erlaubt auch die Definition weiterer Variablentypen wie Enumeration, Pointer, Array, Structure, Union usw., die in späteren Kapiteln behandelt werden.
Variablendefinition in C
Eine Variablendefinition teilt dem Compiler mit, wo und wie viel Speicher für die Variable erstellt werden soll. Sie spezifiziert einen Datentyp und enthält eine Liste von einer oder mehreren Variablen dieses Typs:
typ variablen_liste;
Hier muss typ ein gültiger C-Datentyp sein (char, int, float, double, bool, oder benutzerdefiniert) und variablen_liste besteht aus einem oder mehreren Bezeichnern, getrennt durch Kommas. Gültige Deklarationen:
int i, j, k;
char c, ch;
float f, gehalt;
double d;
Die Zeile int i, j, k; deklariert und definiert die Variablen i, j und k vom Typ int.
Variablen können in ihrer Deklaration initialisiert (einem Anfangswert zugewiesen) werden:
typ variablen_name = wert;
Beispiele:
extern int d = 3, f = 5; // Deklaration von d und f
int d = 3, f = 5; // Definition und Initialisierung
char x = 'x'; // Variable x hat Wert 'x'
Bei Definition ohne Initialisierer: Variablen mit statischer Speicherdauer werden implizit mit NULL (alle Bytes 0) initialisiert; der Anfangswert aller anderen Variablen ist undefiniert.
Variablendeklaration in C
Eine Variablendeklaration versichert dem Compiler, dass eine Variable mit dem gegebenen Typ und Namen existiert, sodass der Compiler die Kompilierung fortsetzen kann, ohne die vollständigen Details zur Variable zu benötigen. Eine Variablendefinition hat ihre Bedeutung zur Kompilierzeit; der Compiler benötigt die tatsächliche Variablendefinition zur Linkzeit.
Eine Variablendeklaration ist nützlich, wenn Sie mehrere Dateien verwenden und Ihre Variable in einer der Dateien definieren, die zur Linkzeit verfügbar sein wird. Sie verwenden das Schlüsselwort extern, um eine Variable an beliebiger Stelle zu deklarieren. Obwohl Sie eine Variable mehrmals in Ihrem C-Programm deklarieren können, kann sie nur einmal in einer Datei, Funktion oder einem Codeblock definiert werden.
Beispiel
#include <stdio.h>
// Variablendeklaration:
extern int a, b;
extern int c;
extern float f;
int main() {
// Variablendefinition:
int a, b;
int c;
float f;
// Tatsächliche Initialisierung
a = 10;
b = 20;
c = a + b;
printf("Wert von c: %d \n", c);
f = 70.0 / 3.0;
printf("Wert von f: %f \n", f);
return 0;
}
Ausgabe:
Wert von c: 30
Wert von f: 23.333334
Dasselbe Konzept gilt für Funktionsdeklarationen: Sie geben einen Funktionsnamen bei der Deklaration an, die eigentliche Definition kann an anderer Stelle erfolgen.
Lvalues und Rvalues in C
Es gibt zwei Arten von Ausdrücken in C:
lvalue – Ausdrücke, die sich auf eine Speicherstelle beziehen. Ein lvalue kann sowohl links als auch rechts von einer Zuweisung stehen.
rvalue – Bezieht sich auf einen Datenwert, der an einer Adresse im Speicher gespeichert ist. Ein rvalue kann nicht zugewiesen werden, d.h., er darf nur rechts von einer Zuweisung stehen.
Variablen sind lvalues und können daher links von einer Zuweisung stehen. Numerische Literale sind rvalues und können nicht zugewiesen werden. Gültige und ungültige Anweisungen:
int g = 20; // gültig
10 = 20; // ungültig; Compile-Time-Fehler
C Sprache
- C# Variablen & Primitive Datentypen meistern: Der komplette Guide
- Variablengültigkeitsbereich in C# verstehen: Klassen-, Methoden- und Blockebene
- C++-Variablen, Literale und Konstanten meistern: Ein umfassender Leitfaden
- C Variablen, Konstanten und Literale: Ein vollständiger Leitfaden
- C Speicherklassen verstehen: Gültigkeitsbereich, Lebensdauer und Performance
- Pythons global-Schlüsselwort meistern: Wie & wann man es verwendet
- Java Variablen und Literale: Umfassender Leitfaden
- C++ Variablen und Datentypen: Experten‑Guide zu int, double, char, string, bool
- Verilog Assignments verstehen: Typen, Syntax und Best Practices
- Java Variablentypen verstehen: Ein umfassender Leitfaden