Einführung
In diesem Lab lernst du die Variablen und Datentypen in C++. Du wirst lernen, wie Variablen definiert werden und wie verschiedene Arten von Variablen verwendet werden.
💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken
In diesem Lab lernst du die Variablen und Datentypen in C++. Du wirst lernen, wie Variablen definiert werden und wie verschiedene Arten von Variablen verwendet werden.
Computerprogramme verarbeiten Daten. Eine Variable wird verwendet, um ein Datenstück für die Verarbeitung zu speichern. Sie wird Variable genannt, weil Sie den gespeicherten Wert ändern können.
Eine Variable ist ein benannter Speicherort, der einen Wert eines bestimmten Datentyps speichert. Mit anderen Worten hat eine Variable einen Namen, einen Typ und speichert einen Wert.
radius
, area
, age
, height
. Der Name ist erforderlich, um jede Variable eindeutig zu identifizieren, um einem Variablen einen Wert zuzuweisen und den gespeicherten Wert abzurufen.int
oder double
.Im folgenden Diagramm sind zwei Typen von Variablen dargestellt: int
und double
. Eine int
-Variable speichert eine Ganzzahl (ganze Zahl). Eine double
-Variable speichert eine Gleitkommazahl.
Ein Bezeichner ist erforderlich, um eine Variable (oder jedes andere Entität wie eine Funktion oder eine Klasse) zu benennen. C++ stellt die folgenden Regeln für Bezeichner auf:
a-z, A-Z
), Ziffern (0-9
) und Unterstrich (_
) umfassen.+
, -
, *
, /
, '@'
usw.) sind nicht erlaubt.int
, double
, if
, else
, for
).rose
ist KEIN Rose
und KEIN ROSE
.Variablennamenskonvention
Ein Variablennamen ist ein Substantiv oder eine Substantivphrase, die aus mehreren Wörtern besteht. Das erste Wort ist klein geschrieben, während die verbleibenden Wörter mit einem großen Anfangsbuchstaben geschrieben werden, ohne Leerzeichen zwischen den Wörtern. Beispielsweise thefontSize
, roomNumber
, xMax
und thisIsAVeryLongVariableName
, was als Camel-Case bekannt ist.
Empfehlungen
numberOfStudents
oder numStudents
.a
, b
, c
, d
, i
, j
, k
, i1
, j99
. Vermeiden Sie Namen mit einem einzelnen Buchstaben, es sei denn, es handelt sich um übliche Namen wie x
, y
, z
für Koordinaten, i
für Index.row
, um auf eine einzelne Zeilennummer zu verweisen, und rows
, um auf mehrere Zeilen zu verweisen.Bevor Sie eine Variable verwenden, müssen Sie zunächst ihren Namen und Typ in einer der folgenden Syntaxen deklarieren:
Syntax | Beispiel |
---|---|
Deklarieren Sie eine Variable eines bestimmten Typs | int option; |
Deklarieren Sie mehrere Variablen desselben Typs, getrennt durch Kommata | double sum, difference, product, quotient; |
Deklarieren Sie eine Variable und weisen Sie ihr einen Anfangswert dieses Typs zu | int magicNumber = 88; |
Deklarieren Sie mehrere Variablen mit Anfangswerten dieses Typs | double sum = 0.0, product = 1.0; |
Beispiel
int mark1; // Deklarieren Sie eine int-Variable namens mark1
mark1 = 76; // Verwenden Sie mark1
int mark2; // Deklarieren Sie die int-Variable mark2
mark2 = mark1 + 10; // Verwenden Sie mark2 und mark1
double average; // Deklarieren Sie die double-Variable average
average = (mark1 + mark2) / 2.0; // Verwenden Sie average, mark1 und mark2
int mark1; // Fehler: Deklarieren Sie zweimal
mark2 = "Hello"; // Fehler: Weisen Sie einen Wert eines anderen Typs zu
int number; // Deklariert, aber nicht initialisiert
cout << number << endl; // Vor der Initialisierung verwendet, keine Warnung/Fehler, aber unerwartetes Ergebnis.
Beachten Sie, dass:
const
)Konstanten sind nicht veränderbare Variablen, die mit dem Schlüsselwort const
deklariert werden. Ihre Werte können während der Programmausführung nicht geändert werden. Außerdem muss const
bei der Deklaration initialisiert werden. Beispielsweise:
const double PI = 3.1415926; // Muss initialisiert werden
Konstantennamenskonvention: Verwenden Sie Großbuchstaben, verbunden mit Unterstrichen. Beispielsweise MIN_VALUE
.
Ein Ausdruck ist eine Kombination von Operatoren (wie '+'
, '-'
, '*'
, '/'
) und Operandern (Variablen oder Literalwerte), die ausgewertet werden kann, um einen einzelnen Wert eines bestimmten Typs zu ergeben. Beispielsweise:
1 + 2 * 3 // liefert int 7
int sum, number;
sum + number // ausgewertet zu einem int-Wert
double principal, interestRate;
principal * (1 + interestRate) // ausgewertet zu einem double-Wert
=
)Eine Zuweisungsanweisung:
Die rechte Seite muss ein Wert sein; und die linke Seite muss eine Variable (oder eine Speicheradresse) sein.
Die Syntax für die Zuweisungsanweisung lautet:
Syntax | Beispiel |
---|---|
Weise den Literalwert (der rechten Seite) der Variablen (der linken Seite) zu | number = 88; |
Wertet den Ausdruck (rechte Seite) aus und weist das Ergebnis der Variablen (linke Seite) zu | sum = sum + number; |
Die Zuweisungsanweisung sollte so interpretiert werden: Der Ausdruck auf der rechten Seite (RHS) wird zuerst ausgewertet, um einen resultierenden Wert (der rvalue oder right-value genannt wird) zu erzeugen. Der rvalue wird dann der Variablen auf der linken Seite (LHS) zugewiesen (oder lvalue, was ein Speicherort ist, der einen rvalue aufnehmen kann).
Die folgende Tabelle zeigt die typischen Größen, das Minimum und das Maximum für die primitiven Typen. Beachten Sie erneut, dass die Größen von Implementierung zu Implementierung variieren können.
Kategorie | Typ | Beschreibung | Bytes(Typisch) | Minimum(Typisch) | Maximum(Typisch) |
---|---|---|---|---|---|
Ganzzahlen | int(oder signed int) | Vorzeichenbehaftete Ganzzahl (mindestens 16 Bit) | 4 (2) | -2147483648 | 2147483647 |
Ganzzahlen | unsigned int | Vorzeichenlose Ganzzahl (mindestens 16 Bit) | 4 (2) | 0 | 4294967295 |
Ganzzahlen | char | Zeichen (kann entweder vorzeichenbehaftet oder vorzeichenlos sein, je nach Implementierung) | 1 | ||
Ganzzahlen | signed char | Zeichen oder vorzeichenbehaftete kleine Ganzzahl (garantiert vorzeichenbehaftet) | 1 | -128 | 127 |
Ganzzahlen | unsigned char | Zeichen oder vorzeichenlose kleine Ganzzahl (garantiert vorzeichenlos) | 1 | 0 | 255 |
Ganzzahlen | signed short | Kurze vorzeichenbehaftete Ganzzahl (mindestens 16 Bit) | 2 | -32768 | 32767 |
Ganzzahlen | unsigned short | Vorzeichenlose kurze Ganzzahl (mindestens 16 Bit) | 2 | 0 | 65535 |
Ganzzahlen | long | Lange vorzeichenbehaftete Ganzzahl (mindestens 32 Bit) | 4 (8) | -2147483648 | 2147483647 |
Ganzzahlen | unsigned long | Vorzeichenlose lange Ganzzahl (mindestens 32 Bit) | 4 (8) | 0 | wie oben |
Ganzzahlen | long long | Sehr lange vorzeichenbehaftete Ganzzahl (mindestens 64 Bit) | 8 | -2e^63 | 2e^63-1 |
Ganzzahlen | unsigned long long | Vorzeichenlose sehr lange Ganzzahl (mindestens 64 Bit) | 8 | 0 | 2e^64-1 |
Reelle Zahlen | float | Gleitkommazahl, ≈7 Stellen | 4 | 3.4e^38 | 3.4e^(-38) |
Reelle Zahlen | double | Doppelte Genauigkeit Gleitkommazahl, ≈15 Stellen | 8 | 1.7e^308 | 1.7e^(-308) |
Reelle Zahlen | long double | Lange Doppelte Genauigkeit Gleitkommazahl, ≈19 Stellen | 12 (8) | ||
Boolesche Zahlen | bool | Boolescher Wert, entweder true oder false |
1 | false (0) | true (1 oder ungleich 0) |
Breite Zeichen | wchar_tchar16_t,char32_t | Breites (doppelbyte) Zeichen | 2 (4) |
Der sizeof-Operator
C/C++ stellt einen einstelligen sizeof
-Operator zur Verfügung, um die Größe des Operanden (in Bytes) zu erhalten. Das folgende Programm verwendet den sizeof
-Operator, um die Größe der grundlegenden Typen auszugeben (speichern Sie den folgenden Code in test.cpp
in /home/labex/Code
).
/*
* Drucke die Größe der grundlegenden Typen.
*/
#include <iostream>
using namespace std;
int main() {
cout << "sizeof(char) ist " << sizeof(char) << " Bytes " << endl;
cout << "sizeof(short) ist " << sizeof(short) << " Bytes " << endl;
cout << "sizeof(int) ist " << sizeof(int) << " Bytes " << endl;
cout << "sizeof(long) ist " << sizeof(long) << " Bytes " << endl;
cout << "sizeof(long long) ist " << sizeof(long long) << " Bytes " << endl;
cout << "sizeof(float) ist " << sizeof(float) << " Bytes " << endl;
cout << "sizeof(double) ist " << sizeof(double) << " Bytes " << endl;
cout << "sizeof(long double) ist " << sizeof(long double) << " Bytes " << endl;
cout << "sizeof(bool) ist " << sizeof(bool) << " Bytes " << endl;
return 0;
}
Ausgabe:
sizeof(char) ist 1 Bytes
sizeof(short) ist 2 Bytes
sizeof(int) ist 4 Bytes
sizeof(long) ist 4 Bytes
sizeof(long long) ist 8 Bytes
sizeof(float) ist 4 Bytes
sizeof(double) ist 8 Bytes
sizeof(long double) ist 12 Bytes
sizeof(bool) ist 1 Bytes
Die typedef-Anweisung
Das häufige Tippen von unsigned int
kann lästig werden. Die typedef
-Anweisung kann verwendet werden, um einen neuen Namen für einen bestehenden Typ zu erstellen. Beispielsweise können Sie einen neuen Typ namens "uint
" für "unsigned int
" wie folgt erstellen. Die typedef
-Anweisung sollte direkt nach #include
platziert werden. Verwenden Sie typedef
mit Vorsicht, da es das Programm schwerer zu lesen und zu verstehen macht.
typedef unsigned int uint;
Viele C/C++-Compiler definieren einen Typ namens size_t
, der eine typedef
von unsigned int
ist.
typedef unsigned int size_t;
Ganzzahl-Literale
Eine ganze Zahl wie 123
und -456
wird standardmäßig als int
behandelt. Beispielsweise:
int number = -123;
int sum = 4567;
Neben den standardmäßigen Dezimalzahlen können Sie für einen Wert im Hexadezimalformat einen Präfix '0x'
und für einen binären Wert (in einigen Compilern) das Präfix '0b'
verwenden. Beispielsweise:
int number1 = 1234; // Dezimal
int number2 = 01234; // Oktal 1234, Dezimal 2322
int number3 = 0x1abc; // Hexadezimal 1ABC, Dezimal 15274
int number4 = 0b10001001; // Binär (kann in einigen Compilern nicht funktionieren)
Ein long
-Literal wird durch ein Suffix 'L'
oder 'l'
identifiziert (meiden Sie Kleinbuchstaben, da diese mit der Zahl Eins verwechselt werden können). Ein long long int
wird durch ein Suffix 'LL'
identifiziert. Sie können auch das Suffix 'U'
für unsigned int
, 'UL'
für unsigned long
und 'ULL'
für unsigned long long int
verwenden. Beispielsweise:
long number = 12345678L; // Suffix 'L' für long
long sum = 123; // int 123 wird automatisch in long 123L umgewandelt
long long bigNumber = 987654321LL; // Suffix 'LL' für long long int erforderlich
Für short
-Literale ist kein Suffix erforderlich. Sie können jedoch nur ganzzahlige Werte im zugelassenen Bereich verwenden. Beispielsweise:
short midSizeNumber = -12345;
Gleitkomma-Literale
Eine Zahl mit einem Dezimalpunkt wie 55.66
und -33.44
wird standardmäßig als double
behandelt. Sie können sie auch in wissenschaftlicher Notation ausdrücken, z.B. 1.2e3
, -5.5E-6
, wobei e
oder E
den Exponenten in der Potenz von 10 bezeichnet. Sie können dem Bruchteil oder dem Exponenten ein Plus- (+
) oder Minuszeichen (-
) voranstellen. Der Exponent muss eine ganze Zahl sein.
Für float
-Literale müssen Sie ein Suffix von 'f'
oder 'F'
verwenden, z.B. -1.2345F
. Beispielsweise:
float average = 55.66; // Fehler! Die rechte Seite ist ein double. Suffix 'f' für float erforderlich.
float average = 55.66f;
Verwenden Sie für long double
das Suffix 'L'
(oder 'l'
).
bool-Literale
Es gibt nur zwei bool
-Literale, nämlich true
und false
. Beispielsweise:
bool done = true;
bool gameOver = false;
int i;
if (i == 9) { // liefert entweder true oder false
......
}
Zeichen-Literale
Ein druckbares char
-Literal wird durch Einschließen des Zeichens in eine einzelne Anführungszeichenfolge geschrieben, z.B. 'z'
, '$'
und '9'
. In C++ werden Zeichen mit dem 8-Bit ASCII-Code dargestellt und können in arithmetischen Operationen als 8-Bit vorzeichenbehaftete Ganzzahlen behandelt werden. Mit anderen Worten, char
und 8-Bit vorzeichenbehaftete Ganzzahl sind austauschbar. Sie können auch eine ganze Zahl im Bereich [-128, 127]
einer char
-Variablen zuweisen; und [0, 255]
einer unsigned char
. Beispielsweise:
char letter = 'a'; // Identisch mit 97
char anotherLetter = 98; // Identisch mit dem Buchstaben 'b'
cout << letter << endl; // 'a' wird ausgegeben
cout << anotherLetter << endl; // 'b' wird ausgegeben statt der Zahl
anotherLetter += 2; // 100 oder 'd'
cout << anotherLetter << endl; // 'd' wird ausgegeben
cout << (int)anotherLetter << endl; // 100 wird ausgegeben
Zeichenkette-Literale
Ein String
-Literal besteht aus null oder mehr Zeichen, die von einer doppelten Anführungszeichenfolge umgeben sind, z.B. "Hello, world!"
, "The sum is "
, ""
. Beispielsweise:
String directionMsg = "Turn Right";
String greetingMsg = "Hello";
String statusMsg = ""; // leere Zeichenkette
Beispiel (Literale)
/* Testing Primitive Types */
#include <iostream>
using namespace std;
int main() {
char gender ='m'; // char wird in einfachen Anführungszeichen eingeschlossen
bool isMarried = true; // true(nicht null) oder false(0)
unsigned short numChildren = 8; // [0, 255]
short yearOfBirth = 1945; // [-32767, 32768]
unsigned int salary = 88000; // [0, 4294967295]
double weight = 88.88; // Mit Bruchteil
float gpa = 3.88f; // Suffix 'f' für float erforderlich
// "cout <<" kann verwendet werden, um den Wert eines beliebigen Typs auszugeben
cout << "Gender is " << gender << endl;
cout << "Is married is " << isMarried << endl;
cout << "Number of children is " << numChildren << endl;
cout << "Year of birth is " << yearOfBirth << endl;
cout << "Salary is " << salary << endl;
cout << "Weight is " << weight << endl;
cout << "GPA is " << gpa << endl;
return 0;
}
Ausgabe:
Gender is m
Is married is 1 // true
Number of children is 8
Year of birth is 1945
Salary is 88000
Weight is 88.88
GPA is 3.88
In diesem Abschnitt haben wir mehrere Grundtypen vorgestellt. Sie sollten wissen, wie eine Variable dargestellt und darauf operiert werden kann. Denken Sie daran, wie groß jeder Typ im Speicher ist und welchen Wertebereich jeder Typ hat.