Frage zu Datentypen

  • Themenstarter Themenstarter C152778
  • Beginndatum Beginndatum
C

C152778

Hallo :)

Ich bin eher ein Neuling in Sachen C/C++ und habe ein paar grundlegende Fragen zu Datentypen.

In einem Buch habe ich folgende Deklarationen entdeckt:
Code:
  unsigned msb;
  
  struct {
    unsigned char ip[4];
  }  ipv4[] = { { { 23, 126, 166, 16 } },
                     { { 23, 126, 166, 16 } },
                     { { 23, 126, 166, 16 } } };

Nun kenne ich mich mit Datentypen bereits ein wenig aus, jedoch sind mir diese zwei Deklarationen noch nie untergekommen.

Warum hat die Variable msb nur den Typ 'unsigned'?
Normalerweise folgt diesem Schlüsselwort doch noch ein konkreter Typ wie 'unsigned int', wodurch gekennzeichnet wird, dass der Typ 'int' zeichenlos aufgefasst wird.

Auch kenne ich das Schlüsselwort struct, um Datentypen zusammenzufassen, jedoch ist mir die obige Deklaration sehr schleierhaft. Was geschieht hier?


Danke im voraus!

Grüße, Cyraid
 
Hi.
In einem Buch habe ich folgende Deklarationen entdeckt:
Code:
  unsigned msb;
  
  struct {
    unsigned char ip[4];
  }  ipv4[] = { { { 23, 126, 166, 16 } },
                     { { 23, 126, 166, 16 } },
                     { { 23, 126, 166, 16 } } };

Nun kenne ich mich mit Datentypen bereits ein wenig aus, jedoch sind mir diese zwei Deklarationen noch nie untergekommen.

Warum hat die Variable msb nur den Typ 'unsigned'?
Es ist eine abkürzende Schreibweise und hat die gleiche Bedeutung wie "unsigned int". Der Typ "int" ist eine abkürzende Schreibweise für "signed int". Bei dem Typ char ist das anders, da gibt es 3 verschiedene Typen (char, signed char, unsigned char).
Auch kenne ich das Schlüsselwort struct, um Datentypen zusammenzufassen, jedoch ist mir die obige Deklaration sehr schleierhaft. Was geschieht hier?
Das obige ist nicht nur eine Deklaration (eines Datentyps) sondern auch eine Definition einer Variablen die auch gleich noch initialisiert wird. Konkret wird dort ein Array von (anonymen) structs definiert und mit 3 Elementen bestehend aus jeweils 4 unsigned char Werten initialisiert.

Gruß
 
Danke für die schnelle und kompetente Antwort.

Zwei Fragen habe ich dazu noch:

signed/unsigned markiert eine Variable, sie als vorzeichenlos aufzufassen oder nicht. Wo liegt der Unterschied zwischen char, unsigned char und signed char? Wie ist char selbst aufzufassen? Da du meintest, dass es da keine abkürzende Schreibweise ist.

Die andere Frage ist, was macht es für einen Sinn ein anonymes struct anzulegen, welches nur einen Datentyp, hier unsigned char, beinhaltet?
Wäre es nicht eleganter gewesen ipv4 ohne struct zu initialisieren?
Oder gibt es da bestimmte Vorteile, die ich nicht sehe? :)


Danke und schöne Grüße,
Cyraid
 
signed/unsigned markiert eine Variable, sie als vorzeichenlos aufzufassen oder nicht. Wo liegt der Unterschied zwischen char, unsigned char und signed char? Wie ist char selbst aufzufassen? Da du meintest, dass es da keine abkürzende Schreibweise ist.
Da früher vor Verabschiedung des C-Standard bei den Compilerherstellern keine Einigkeit herrschte ob ein char vorzeichenbehaftet ist oder nicht, wurde dies auch so in den Standard aufgenommen. D.h. ein char ist vorzeichenbehaftet, oder aber auch nicht - das ist prinzipiell abhängig von der verwendeten Plattform. Ein unsigned char dagegen ist natürlich nie vorzeichenbehaftet, ein signed char immer.
Die andere Frage ist, was macht es für einen Sinn ein anonymes struct anzulegen, welches nur einen Datentyp, hier unsigned char, beinhaltet?

Wäre es nicht eleganter gewesen ipv4 ohne struct zu initialisieren?
Ja, eigentlich schon. :)

Gruß
 
Zurück