C Variable

Variablen sind eigentlich nur Namen für die Speicherbereiche, auf denen ein Programm arbeiten kann. In C hat jede Variable einen bestimmten Typ, der die Größe und das Layout des Variablenspeichers bestimmt. Werte innerhalb dieses Bereichs können im Speicher abgelegt werden, und Operatoren können auf die Variable angewendet werden.

Variablennamen können aus Buchstaben, Ziffern und Unterstrichzeichen bestehen. Sie müssen mit einem Buchstaben oder Unterstrich beginnen. Groß- und Kleinbuchstaben sind unterschiedlich, da C zwischen Groß- und Kleinschreibung unterscheidet. Basierend auf den im vorherigen Kapitel erläuterten Basistypen gibt es die folgenden grundlegenden Variablentypen:

TypeBeschreibung
charNormalerweise ein Byte (acht Bits). Dies ist ein Ganzzahltyp.
intGanzzahl, 4 Bytes, Wertebereich von -2147483648 bis 2147483647.
float

Gleitkommawert mit einfacher Genauigkeit. Einfache Genauigkeit hat das Format: 1 Vorzeichenbit, 8 Exponentbits und 23 Mantissenbits.

double

Gleitkommawert mit doppelter Genauigkeit. Doppelte Genauigkeit hat 1 Vorzeichenbit, 11 Exponentbits und 52 Mantissenbits.

voidGibt das Fehlen eines Typs an.

Die Sprache C erlaubt auch die Definition verschiedener anderer Variablentypen, wie Aufzählungen, Zeiger, Arrays, Strukturen, Unions und so weiter. Diese werden in späteren Kapiteln erklärt. In diesem Kapitel besprechen wir zunächst die grundlegenden Variablentypen.

Variablendefinitionen in C

Die Variablendefinition teilt dem Compiler mit, wo und wie Speicher für eine Variable erstellt werden soll. Eine Variablendefinition gibt einen Datentyp an und enthält eine Liste mit einer oder mehreren Variablen dieses Typs, wie unten gezeigt:

type variable_list;

typeGibt den Datentyp der Variablen an. Er kann Ganzzahl, Gleitkommazahl, Zeichen, Zeiger usw. sein, und er kann auch ein benutzerdefiniertes Objekt sein.

variable_listKann aus einem oder mehreren Variablennamen bestehen, wobei mehrere Variablen durch Kommas getrennt werden.,Getrennt. Variablen bestehen aus Buchstaben, Ziffern und Unterstrichen und beginnen mit einem Buchstaben oder Unterstrich.

Nachfolgend sind mehrere gültige Deklarationen aufgeführt:

Ganzzahlvariable definieren:

int age;

Im obigen Code wird age als ganzzahlige Variable definiert.

Definieren Sie eine Gleitkommavariable:

float salary;

Im obigen Code wird salary als Gleitkommavariable definiert.

Definieren Sie eine Zeichenvariable:

char grade;

Im obigen Code wird grade als Zeichenvariable definiert.

Definieren Sie eine Zeigervariable:

int *ptr;

Im obigen Code wird ptr als ganzzahlige Zeigervariable definiert.

Definieren Sie mehrere Variablen:

int    i, j, k;

int i, j, k;Deklariert und definiert die Variableni, j und k, was den Compiler anweist, eine Variable vom Typintnamensi、j、kVariable.

Variableninitialisierung

In der Sprache C ist die Variableninitialisierung das Zuweisen eines Anfangswerts an eine Variable gleichzeitig mit ihrer Definition. Die Initialisierung einer Variablen kann zum Zeitpunkt der Definition oder in nachfolgendem Code erfolgen.

Ein Initialisierer besteht aus einem Gleichheitszeichen, gefolgt von einem konstanten Ausdruck, wie unten gezeigt:

type variable_name = value;

wobei,typeden Datentyp der Variable angibt,variable_nameder Name der Variable ist,valueist der Anfangswert der Variable.

Hier sind einige Beispiele:

int x = 10;         // 整型变量 x 初始化为 10
float pi = 3.14;    // 浮点型变量 pi 初始化为 3.14
char ch = 'A';      // 字符型变量 ch 初始化为字符 'A'
int d = 3, f = 5;           // 定义并初始化 d 和 f
byte z = 22;                // 定义并初始化 z

// 声明外部变量
extern int d;
extern int f;

Um die Variable später zu initialisieren:

Im Code nach der Variablendefinition kann der Zuweisungsoperator verwendet werden.=Weisen Sie der Variable einen neuen Wert zu.

type variable_name;    // 变量定义
variable_name = new_value;    // 变量初始化

Beispiel wie folgt:

int x;          // 整型变量x定义
x = 20;         // 变量x初始化为20
float pi;       // 浮点型变量pi定义
pi = 3.14159;   // 变量pi初始化为3.14159
char ch;        // 字符型变量ch定义
ch = 'B';       // 变量ch初始化为字符'B'

Beachten Sie, dass Variablen vor der Verwendung initialisiert werden sollten. Der Wert einer nicht initialisierten Variable ist undefiniert und kann beliebige Müllwerte enthalten. Um undefiniertes Verhalten und Fehler zu vermeiden, wird daher empfohlen, Variablen vor der Verwendung zu initialisieren.

Variable nicht initialisiert

In der Sprache C hängt der Standardwert einer Variable, wenn sie nicht explizit initialisiert wird, von ihrem Typ und ihrem Gültigkeitsbereich ab.

Bei globalen Variablen und statischen Variablen (statische Variablen, die innerhalb von Funktionen definiert sind, und globale Variablen, die außerhalb von Funktionen definiert sind), ist ihr Standard-Anfangswert null.

Im Folgenden sind die Standardwerte für verschiedene Variablentypen aufgeführt, wenn sie nicht explizit initialisiert werden:

  • Ganzzahlvariablen (int, short, long, usw.): Standardwert ist 0.
  • Gleitkommavariablen (float, double, usw.): Standardwert ist 0.0.
  • Zeichenvariable (char): Der Standardwert ist '\0', d. h. das Nullzeichen.
  • Zeigervariable: Der Standardwert ist NULL, was bedeutet, dass der Zeiger nicht auf eine gültige Speicheradresse zeigt.
  • Variablen zusammengesetzter Typen wie Arrays, Strukturen und Unions: Ihre Elemente oder Mitglieder werden gemäß den entsprechenden Regeln standardmäßig initialisiert, was die rekursive Anwendung der Standardregeln auf Elemente einschließen kann.

Beachten Sie, dass lokale Variablen (nicht-statische Variablen, die innerhalb von Funktionen definiert sind) nicht automatisch mit Standardwerten initialisiert werden; ihre Anfangswerte sind undefiniert (enthalten Müllwerte). Daher sollten Sie, bevor Sie eine lokale Variable verwenden, ihr explizit einen Anfangswert zuweisen.

Zusammenfassend hängt der Standardwert einer Variablen in C von ihrem Typ und ihrem Gültigkeitsbereich ab. Der Standardwert für globale Variablen und statische Variablen ist0, der Standardwert einer Zeichenvariablen ist\0, der Standardwert für Zeigervariablen ist NULL, und lokale Variablen haben keinen Standardwert; ihre Anfangswerte sind undefiniert.

Variablendeklarationen in C

Eine Variablendeklaration versichert dem Compiler, dass eine Variable mit dem angegebenen Typ und Namen existiert, sodass der Compiler die weitere Kompilierung fortsetzen kann, ohne die vollständigen Details der Variablen kennen zu müssen. Eine Variablendeklaration hat nur zur Kompilierzeit Bedeutung; wenn das Programm gelinkt wird, benötigt der Compiler die tatsächliche Variablendeklaration.

Es gibt zwei Fälle von Variablendeklarationen:

  • 1. Eine Art erfordert, dass Speicherplatz angelegt wird. Zum Beispiel:int aDer Speicherplatz ist bereits zum Zeitpunkt der Deklaration angelegt.
  • 2. Die andere Art erfordert nicht, dass Speicherplatz angelegt wird, indem das Schlüsselwort extern verwendet wird, um einen Variablennamen zu deklarieren, ohne ihn zu definieren. Zum Beispiel:extern int awobei Variablenain einer anderen Datei definiert werden können.

Sofern nicht das Schlüsselwortexternvorhanden ist; andernfalls sind sie alle Variablendefinitionen.

extern int i; //声明,不是定义
int i; //声明,也是定义

Für weitere Erklärungen zu extern siehe:C extern-Schlüsselwort。

Beispiel

Versuchen Sie das folgende Beispiel, bei dem Variablen oben deklariert, aber in der main-Funktion definiert und initialisiert werden:

Beispiel

#include <stdio.h> // Variablen x und y außerhalb der Funktion definieren int x; int y; int addtwonum() { // Variablen x und y innerhalb der Funktion als externe Variablen deklarieren extern int x; extern int y; // Werte den externen Variablen (globalen Variablen) x und y zuweisen x = 1; y = 2; return x+y; } int main() { int result; // Funktion addtwonum aufrufen result = addtwonum(); printf("result is: %d",result); return 0; }

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

result 为: 3

Wenn Sie auf eine Variable verweisen müssen, die in einer anderen Quelldatei definiert ist, müssen Sie in der Datei, die darauf verweist, nur die Deklaration mit dem Schlüsselwort extern für diese Variable hinzufügen.

Code der Datei addtwonum.c:

#include <stdio.h> /*Externe Variablendeklaration*/ extern int x ; extern int y ; int addtwonum() { return x+y; }

Code der Datei test.c:

#include <stdio.h> /*Definieren Sie zwei globale Variablen*/ int x=1; int y=2; int addtwonum(); int main(void) { int result; result = addtwonum(); printf("result is: %d\n",result); return 0; }

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

$ gcc addtwonum.c test.c -o main
$ ./main
result 为: 3

Lvalues und Rvalues in C

In C gibt es zwei Arten von Ausdrücken:

  1. lvalue:Ein Ausdruck, der auf eine Speicherstelle verweist, wird als lvalue-Ausdruck bezeichnet. Ein lvalue kann entweder auf der linken oder auf der rechten Seite eines Zuweisungsoperators stehen.
  2. rvalue:Der Begriff rvalue bezeichnet einen Wert, der an einer Adresse im Speicher gespeichert ist. Ein rvalue ist ein Ausdruck, dem kein Wert zugewiesen werden kann; das heißt, ein rvalue kann auf der rechten Seite eines Zuweisungsoperators stehen, aber nicht auf der linken Seite.

Variablen sind lvalues, daher können sie auf der linken Seite eines Zuweisungsoperators stehen. Numerische Literale sind rvalues, daher kann ihnen kein Wert zugewiesen werden, und sie können nicht auf der linken Seite eines Zuweisungsoperators stehen. Das Folgende ist eine gültige Anweisung:

int g = 20;

Das Folgende ist jedoch keine gültige Anweisung und erzeugt einen Kompilierzeitfehler:

10 = 20;
Weitere Erweiterungen