C Konstanten
Konstanten sind feste Werte, die sich während der Programmausführung nicht ändern. Diese festen Werte werden auchLiterale genannt。
Konstanten können jeden grundlegenden Datentyp haben, wie z. B. Ganzzahlkonstanten, Gleitkommakonstanten, Zeichenkonstanten oder Zeichenkettenliterale sowie Aufzählungskonstanten.
KonstantenSie sind wie reguläre Variablen, außer dass der Wert einer Konstante nach der Definition nicht geändert werden kann.
Konstanten können direkt im Code verwendet werden, oder sie können durch Definieren von Konstanten verwendet werden.
Ganzzahlkonstanten
Ganzzahlkonstanten können Dezimal-, Oktal- oder Hexadezimalkonstanten sein. Das Präfix gibt die Basis an: 0x oder 0X kennzeichnet Hexadezimal, 0 kennzeichnet Oktal, und kein Präfix kennzeichnet standardmäßig Dezimal.
Integer-Konstanten können auch ein Suffix haben, das eine Kombination aus U und L ist. U steht für unsigned integer, und L steht für long integer. Das Suffix kann in Groß- oder Kleinbuchstaben geschrieben werden, und die Reihenfolge von U und L ist beliebig.
Nachfolgend einige Beispiele für Integer-Konstanten:
212 /* 合法的 */ 215u /* 合法的 */ 0xFeeL /* 合法的 */ 078 /* 非法的:8 不是八进制的数字 */ 032UU /* 非法的:不能重复后缀 */
Im Folgenden sind Beispiele für Ganzzahlkonstanten verschiedener Typen aufgeführt:
85 /* 十进制 */ 0213 /* 八进制 */ 0x4b /* 十六进制 */ 30 /* 整数 */ 30u /* 无符号整数 */ 30l /* 长整数 */ 30ul /* 无符号长整数 */
Integer-Konstanten können ein Suffix haben, um den Datentyp anzugeben, zum Beispiel:
Beispiel
long myLong = 100000L;
unsigned int myUnsignedInt = 10U;
Gleitkommakonstanten
Gleitkommakonstanten bestehen aus einem ganzzahligen Teil, einem Dezimalpunkt, einem Nachkommateil und einem Exponententeil. Sie können die Dezimalform oder die Exponentialform verwenden, um Gleitkommakonstanten darzustellen.
In Dezimalform müssen Sie den ganzzahligen Teil, den Bruchteil oder beides angeben. In Exponentialform müssen Sie den Dezimalpunkt, den Exponenten oder beides angeben. Der vorzeichenbehaftete Exponent wird mit e oder E eingeleitet.
Nachfolgend einige Beispiele für Gleitkommakonstanten:
3.14159 /* 合法的 */ 314159E-5L /* 合法的 */ 510E /* 非法的:不完整的指数 */ 210f /* 非法的:没有小数或指数 */ .e55 /* 非法的:缺少整数或分数 */
Gleitkommakonstanten können ein Suffix haben, um den Datentyp anzugeben, zum Beispiel:
Beispiel
double myDouble = 3.14159;
Zeichenkonstanten
Zeichenkonstanten werden in einfache Anführungszeichen eingeschlossen. Zum Beispiel kann 'x' incharin einfachen Variablen eines Typs gespeichert werden.
Eine Zeichenkonstante kann ein gewöhnliches Zeichen (z. B. 'x'), eine Escape-Sequenz (z. B. '\t') oder ein universelles Zeichen (z. B. '\u02C0') sein.
In C gibt es bestimmte Zeichen, die eine besondere Bedeutung haben, wenn ihnen ein Backslash vorangestellt ist. Sie werden verwendet, um Dinge wie Zeilenumbruch (\n) oder Tabulator (\t) darzustellen. Die folgende Tabelle listet einige dieser Escape-Sequenz-Codes auf:
| Escape-Sequenzen | Bedeutung |
|---|---|
| \\ | \ Zeichen |
| \' | ' Zeichen |
| \" | " Zeichen |
| \? | ? Zeichen |
| \a | Alarmglocke |
| \b | Rücktaste |
| \f | Seitenvorschub |
| \n | Zeilenumbruch |
| \r | Wagenrücklauf |
| \t | Horizontaler Tabulator |
| \v | Vertikaltabulator |
| \ooo | Oktalzahlen mit einer bis drei Ziffern |
| \xhh . . . | Hexadezimalzahlen mit einer oder mehreren Ziffern |
Das folgende Beispiel zeigt einige Escape-Sequenz-Zeichen:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
Hello World
Der ASCII-Wert einer Zeichenkonstante kann durch einen Typcast in einen ganzzahligen Wert umgewandelt werden.
Beispiel
int myAsciiValue = (int) myChar; // myChar in ASCII-Wert 97 umwandeln
String-Konstanten
String-Literale oder -Konstanten werden in doppelte Anführungszeichen eingeschlossen" ". Ein String enthält Zeichen ähnlich wie Zeichenkonstanten: gewöhnliche Zeichen, Escape-Sequenzen und universelle Zeichen.
Sie können Leerzeichen als Trennzeichen verwenden, um eine sehr lange String-Konstante in mehrere Zeilen aufzuteilen.
Das folgende Beispiel zeigt einige String-Konstanten. Die in den folgenden drei Formen gezeigten Strings sind identisch.
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
String-Konstanten werden im Speicher alsnullTerminator\0Ende gespeichert. Zum Beispiel:
char myString[] = "Hello, world!"; //系统对字符串常量自动加一个 '\0'
Konstanten definieren
In C gibt es zwei einfache Möglichkeiten, Konstanten zu definieren:
- Verwendung#definePräprozessor: #define kann eine Konstante in einem Programm definieren, und sie wird zur Kompilierungszeit durch ihren entsprechenden Wert ersetzt.
- VerwendungconstSchlüsselwort: Das Schlüsselwort const wird verwendet, um eine schreibgeschützte Variable zu deklarieren, das heißt, der Wert der Variable kann während der Ausführung des Programms nicht geändert werden.
#define-Präprozessor
Das Folgende ist die Form zum Definieren von Konstanten mit dem #define-Präprozessor:
#define 常量名 常量值
Der folgende Code definiert eine Konstante namens PI:
#define PI 3.14159Wenn diese Konstante im Programm verwendet wird, ersetzt der Compiler alle PI durch 3.14159.
Einzelheiten finden Sie in den folgenden Beispielen:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
value of area : 50
const-Schlüsselwort
Sie könnenconstverwenden. Eine Präfixdeklaration gibt eine Konstante eines gegebenen Typs an, wie unten gezeigt:
const 数据类型 常量名 = 常量值;
Der folgende Code definiert eine Konstante namens MAX_VALUE:
const int MAX_VALUE = 100;Wenn diese Konstante im Programm verwendet wird, ist ihr Wert immer 100 und kann nicht geändert werden.

Die const-Deklaration definiert eine Konstante innerhalb einer Anweisung:

Einzelheiten finden Sie in den folgenden Beispielen:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:
value of area : 50
Beachten Sie, dass es eine gute Programmierpraxis ist, Konstanten in Großbuchstaben zu definieren.
Unterschied zwischen #define und const
Sowohl #define als auch const können verwendet werden, um Konstanten zu definieren. Welche gewählt wird, hängt von den spezifischen Anforderungen und Programmiergewohnheiten ab. Im Allgemeinen wird empfohlen, das Schlüsselwort const zu verwenden, um Konstanten zu definieren, da es die Vorteile der Typüberprüfung und des Gültigkeitsbereichs bietet, während #define nur einen einfachen Textersatz durchführt, was zu einigen unerwarteten Problemen führen kann.
Es gibt einige Unterschiede zwischen der Präprozessor-Anweisung #define und dem Schlüsselwort const beim Definieren von Konstanten:
Ersetzungsmechanismus:
#defineist eine einfache Textersetzung, währendconstdient dazu, eine Konstante mit einem Typ zu deklarieren.#defineMit #define definierte Konstanten werden zur Kompilierzeit direkt durch ihre entsprechenden Werte ersetzt, währendconstDie definierte Konstante reserviert zur Laufzeit Speicher und verfügt über Typinformationen.Typprüfung:
#definees wird keine Typprüfung durchgeführt, da es sich nur um eine einfache Textersetzung handelt. JedochconstDie definierte Konstante verfügt über Typinformationen, und der Compiler kann eine Typprüfung an ihr durchführen. Dies kann helfen, einige potenzielle Typfehler zu erkennen.Gültigkeitsbereich:
#defineMit #define definierte Konstanten haben keine Einschränkung des Gültigkeitsbereichs; sie sind im gesamten Code nach der Definition gültig. JedochconstMit const definierte Konstanten haben Block-Gültigkeitsbereich und sind nur in dem Bereich gültig, in dem sie definiert sind.Debugging und Symboltabelle: unter Verwendung von
#defineMit #define definierte Konstanten haben keinen entsprechenden Eintrag in der Symboltabelle, weil sie nur Textersetzung sind. Wenn man jedochconstmit const definierte Konstanten haben entsprechende Einträge in der Symboltabelle, was beim Debuggen und für die Lesbarkeit hilft.