Wenn der Ausdruck type name[count]
in einer Funktion geschrieben ist, weisen Sie den C-Compiler an, die Stack-Frame- sizeof(type)*count
Bytes zuzuweisen und die Adresse des ersten Elements im Array zu berechnen.
Ist der Ausdruck type name[count]
außerhalb aller Funktionen und Strukturdefinitionen geschrieben wird, weisen Sie den C-Compiler an, die Datensegmentbytes zuzuweisen sizeof(type)*count
und die Adresse des ersten Elements im Array zu berechnen.
name
Tatsächlich ist es ein konstantes Objekt, das die Adresse des ersten Elements im Array speichert. Jedes Objekt, das eine Adresse eines Speichers speichert, wird als Zeiger bezeichnet. Aus diesem Grund behandeln Sie diesen name
als Zeiger und nicht als Array. Beachten Sie, dass auf Arrays in C nur über Zeiger zugegriffen werden kann.
Wenn count
es sich um einen konstanten Ausdruck handelt, der zu Null ausgewertet wird, weisen Sie den C-Compiler an, entweder im Stack-Frame oder im Datensegment Null-Bytes zuzuweisen und die Adresse des ersten Elements im Array zurückzugeben. Das Problem dabei ist jedoch, dass das erste Element ist Array mit der Länge Null existiert nicht und Sie können die Adresse von etwas, das nicht existiert, nicht berechnen.
Dies ist rational das Element Nr. count+1
existiert nicht im count
-length-Array, daher verbietet der C-Compiler, ein Array mit der Länge Null als Variable innerhalb und außerhalb einer Funktion zu definieren. Worin besteht dann der Inhalt name
? Welche Adressename
speichert genau?
Wenn p
es sich um einen Zeiger handelt, ist der Ausdruck p[n]
äquivalent zu*(p + n)
Wenn das Sternchen * im rechten Ausdruck eine dereferenzierte Operation des Zeigers ist, dh auf den Speicher zugreifen, auf den verwiesen wird, p + n
oder auf den Speicher, in dem die Adresse gespeichert ist p + n
, und p + n
Zeigerausdruck, nimmt er die Adresse von p
und n
multipliziert die Zahl mit dieser Adresse Größe des Zeigertyps p
.
Ist es möglich, eine Adresse und eine Nummer hinzuzufügen?
Ja, das ist möglich, da es sich bei der Adresse um eine vorzeichenlose Ganzzahl handelt, die üblicherweise in hexadezimaler Schreibweise dargestellt wird.