Datentypen in C

Aus dev.kaibel.net
Version vom 3. November 2025, 14:38 Uhr von PhilKa (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Datentypen in C = In der Programmiersprache '''C''' sind '''Datentypen''' die Grundlage jeder Variablendeklaration und bestimmen: * die **Art der gespeicherten Werte** (z. B. Ganzzahlen, Fließkommazahlen, Zeichen), * die **Speichergröße**, * den **Wertebereich**, * und die **Art der Operationen**, die auf diesen Daten erlaubt sind. Datentypen in C lassen sich in **grundlegende (primitive)**, **abgeleitete**, **benutzerdefinierte** und **void**-Type…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Datentypen in C

In der Programmiersprache C sind Datentypen die Grundlage jeder Variablendeklaration und bestimmen:

  • die **Art der gespeicherten Werte** (z. B. Ganzzahlen, Fließkommazahlen, Zeichen),
  • die **Speichergröße**,
  • den **Wertebereich**,
  • und die **Art der Operationen**, die auf diesen Daten erlaubt sind.

Datentypen in C lassen sich in **grundlegende (primitive)**, **abgeleitete**, **benutzerdefinierte** und **void**-Typen unterteilen.

---

Übersicht

Kategorie Beispiele Beschreibung
Grundlegende Typen int, float, char Basisdatentypen der Sprache
Abgeleitete Typen array, pointer, struct Aus bestehenden Typen zusammengesetzt
Benutzerdefinierte Typen typedef, enum, union Durch Programmierer definierbar
Spezieller Typ void Bedeutet „kein Wert“ oder „kein Rückgabewert“

---

Grundlegende (primitive) Datentypen

C definiert mehrere elementare Datentypen für Zahlen, Zeichen und Gleitkommazahlen.

Ganzzahltypen

Ganzzahlen können **vorzeichenbehaftet (signed)** oder **vorzeichenlos (unsigned)** sein.

Typ Speichergröße (typisch) Wertebereich (signed) Wertebereich (unsigned)
char 1 Byte (8 Bit) −128 … 127 0 … 255
short 2 Byte (16 Bit) −32 768 … 32 767 0 … 65 535
int 4 Byte (32 Bit) −2 147 483 648 … 2 147 483 647 0 … 4 294 967 295
long 8 Byte (64 Bit) −9 223 372 036 854 775 808 … 9 223 372 036 854 775 807 0 … 18 446 744 073 709 551 615

Beispiel:

int zahl = 42;
unsigned int u_zahl = 255;
short klein = -100;

---

Fließkommazahltypen

C unterstützt drei standardisierte Gleitkommatypen für Dezimalzahlen:

Typ Speichergröße Genauigkeit Beispielwert
float 4 Byte ca. 6 Stellen 3.14f
double 8 Byte ca. 15 Stellen 3.14159265358979
long double ≥ 10 Byte ≥ 18 Stellen 3.141592653589793238L

Beispiel:

float pi = 3.14f;
double e = 2.718281828;
long double g = 9.81L;

---

Zeichentyp

Der Typ char dient zur Darstellung einzelner Zeichen:

char buchstabe = 'A';

Da char intern numerisch gespeichert wird, gilt:

printf("%d", buchstabe);  // Ausgabe: 65 (ASCII-Code)

---

Schlüsselwort _Bool

Seit C99 gibt es den Typ _Bool (Header <stdbool.h> mit Alias bool):

#include <stdbool.h>
bool fertig = true;

---

Erweiterte Standardtypen aus <stdint.h>

Seit C99 enthält die Header-Datei <stdint.h> **portierbare Ganzzahltypen mit fester Bitbreite**.

Typ Breite Bereich Beschreibung
int8_t / uint8_t 8 Bit −128 … 127 / 0 … 255 exakt 1 Byte
int16_t / uint16_t 16 Bit −32 768 … 32 767 / 0 … 65 535 2 Byte
int32_t / uint32_t 32 Bit −2 147 483 648 … 2 147 483 647 / 0 … 4 294 967 295 4 Byte
int64_t / uint64_t 64 Bit −2⁶³ … 2⁶³−1 / 0 … 2⁶⁴−1 8 Byte

Beispiel:

#include <stdint.h>
uint8_t byte = 255;
int16_t wert = -1000;

---

Abgeleitete Datentypen

Diese Typen basieren auf den Grundtypen und erweitern sie funktional.

Arrays

Ein Array ist eine Sammlung gleichartiger Werte im Speicher:

int zahlen[3] = {1, 2, 3};
printf("%d\n", zahlen[0]); // Ausgabe: 1

Zeiger (Pointer)

Zeiger speichern Speicheradressen anderer Variablen:

int x = 42;
int* p = &x;
printf("%d\n", *p); // Dereferenzierung → 42

Strukturen (struct)

Strukturen fassen unterschiedliche Datentypen zusammen:

struct Person {
    char name[20];
    int alter;
};

struct Person p = {"Anna", 25};
printf("%s ist %d Jahre alt\n", p.name, p.alter);

Union

Eine Union speichert mehrere Datentypen im selben Speicherbereich:

union Zahl {
    int i;
    float f;
};

union Zahl z;
z.i = 42;
printf("%d\n", z.i);

Aufzählung (enum)

Enumerationen definieren symbolische Konstanten:

enum Wochentag { MONTAG, DIENSTAG, MITTWOCH };
enum Wochentag heute = DIENSTAG;

typedef

Ermöglicht die Definition neuer Typnamen:

typedef unsigned char byte;
byte data = 255;

---

Der void-Typ

void bezeichnet die Abwesenheit eines Wertes oder Typs.

  • **Als Funktionsrückgabe:**
  void print(void) {
      printf("Hallo Welt\n");
  }
  • **Als Zeiger:**
  void* ptr;
  ptr = malloc(100);
 → ein generischer Zeiger auf beliebige Datentypen.

---

Typkonvertierungen (Casting)

C erlaubt die explizite Umwandlung eines Wertes in einen anderen Typ:

int i = 10;
float f = (float)i / 4;  // → 2.5

Auch implizite (automatische) Typumwandlungen finden statt, z. B. bei arithmetischen Operationen zwischen int und double.

---

Speicherbedarf prüfen

Die Funktion sizeof() gibt die Größe eines Datentyps in Byte zurück:

printf("sizeof(int): %zu\n", sizeof(int));
printf("sizeof(double): %zu\n", sizeof(double));

---

Zusammenfassung

| Kategorie | Beispiele | Beschreibung | |------------|------------|---------------| | **Primitive Typen** | `int`, `float`, `char`, `double` | Basis der Sprache | | **Erweiterte Typen** | `uint8_t`, `int32_t`, `size_t` | feste Bitbreite | | **Abgeleitete Typen** | Pointer, Array, Struct, Union | zusammengesetzte Daten | | **Benutzerdefinierte Typen** | `typedef`, `enum` | neue logische Typen | | **Sondertyp** | `void` | kein Wert / generischer Zeiger |

---

Siehe auch

---

Quellen

  • ISO/IEC 9899:2018 (C18) – Programming Language C
  • Kernighan, Brian W.; Ritchie, Dennis M.: The C Programming Language, 2nd Edition
  • The GNU C Library Documentation
  • Linux Man Pages: man sizeof, man stdint
  • Michael Kerrisk: The Linux Programming Interface, 2010