Kann man mit dem Integer-Datentyp auch Buchstaben für die Deklaration verwenden?
Wie im unteren Bild zu erkennen, wurde beim Deklarieren von der Konstante „sensorPin“ mit dem Datentyp „int“ A0 (für den AnalogPin im Mikrocontroller) als Wert gegeben. Doch ich dachte, man könne mit dem Datentyp „Integer“ nur Ganzzahlen in einem bestimmten Wertebereich als Wert für eine Konstante oder Variable nehmen und für Zahlen müsse man den Datentyp „Char“ nehmen.
Darf man also mit dem Datentyp „Integer“ auch Buchstaben für die Initialisierung verwenden? Oder ist das hier eine Ausnahme?
Vielen lieben Dank für die Antwort sowohl auch für die Hilfsbereitschaft im Voraus.
2 Antworten
Die Antwort lautet nein. Mann kann keine Buchstaben verwenden. Was bedeutet nun A0. A0 ist eine konstante in der ein integer wert gespeichert ist, sodass es für dich einfacher ist. Theoretisch könntest du den Wert Im Internet Recherchieren und den als alternative verwenden.
du bist nicht der einzige der das wissen will:
https://forum.arduino.cc/t/variable-int-with-a0-instead-of-a-number/681553
A0 ist eine Konstante (die wiederum auf ein Makro mit numerischen Wert verweist). Das heißt, bei der Definition wird deiner sensorPin-Variable der numerische Wert, auf den A0 zeigt (14), zugewiesen. Da die 14 locker in den Wertebereich eines Integer passt, geht das problemlos vonstatten.
Darf man also mit dem Datentyp „Integer“ auch Buchstaben für die Initialisierung verwenden?
Die Datentypen char und int sind miteinander gewissermaßen kompatibel, da jedem Zeichen auch ein numerischer Wert zugeordnet werden kann. Schau dazu in die ASCII-Tabelle. Dort siehst du beispielsweise, das dem kleinen a der Dezimalwert 97 zugeordnet werden kann.
Wenn du nun im Code schreibst:
int a = 'a';
printf("%d", a); // 'a'
ist die Ausgabe 97. Das char-Literal kann implizit zu einer Zahl gecastet werden.
Das geht auch andersherum:
char a = 97;
printf("%c", a); // 97
Mit deiner obigen Situation hat all das aber nichts zu tun.
Der char-Datentyp ist zur Darstellung von Zeichen zuständig, der int-Datentyp für ganze Zahlen. Ich habe oben nur erklärt, dass man beide Typen in den jeweils anderen konvertieren kann und der Compiler damit selbst zurechtkommt (impliziter Typecast). Deswegen ersetzen sie sich nicht gegenseitig.
Okay, also wird der Buchstabe „A“ in eine Dezimalzahl umgewandelt, sodass das der Integer versteht. Aber wenn man Buchstaben als Wert mit dem Datentyp „Integer“ verwenden kann, weshalb gibt es dann den Datentpen „Char“ ??