Lerne Arrays, dieses ist genug

"Es ist nicht der Vorfall selbst, der die Menschen verletzt, sondern seine Ansichten zu dem Vorfall." Dale Carnegie - "Die Schwäche der menschlichen Natur"

Heute haben wir einen Chef eingeladen, der nicht glaubt, dass er nur eine Person ist, er kann mehr Dinge halten als Sie.
Fügen Sie hier eine Bildbeschreibung ein

Wie heißt der Chef? Moment mal, Sie können den Namen des Chefs nicht beiläufig sagen

Vorstellung des Chefs:

(Array) ist eine Reihe identischer Werte, die in der angegebenen Reihenfolge gespeichert sind. Dies können 10 Zeichen vom Typ char oder 15 Werte vom Typ int sein. Das ist richtig, der Chef ist ein Array. Dieser Chef hat immer noch viele jüngere Brüder. Wie lautet der Nachname dieser jüngeren Brüder? Es gibt einen speziellen Namen namens Element. Richtig, das gesamte Array hat einen Array-Namen, und auf einzelne Elemente oder Elemente im Array wird über ganzzahlige Indizes zugegriffen.

So definieren Sie ein Array:

** **.

int name[10];//说明可存储10个int类型整数的数组
char name[10];//说明可存储10个字符的数组

** **.

Der Chef ist fast fertig, also stellt er als nächstes den jüngeren Bruder (die Elemente im Array) vor. Das Kind ist sehr mächtig, es kann jeder Datentyp sein.

Wir nennen die Zahlen, die zur Identifizierung von Array-Elementen verwendet werden, den Index, den Index oder den Offset. Es ist zu beachten, dass der Index eine Ganzzahl sein muss. Die Ganzzahl im Index gibt auch an, wie viele Elemente sich im Array befinden, und muss von 0 gezählt werden. Es gibt auch Fallstricke bei Indizes, da der C-Compiler aus Angst, die Ausführungsgeschwindigkeit zu beeinträchtigen, nicht prüft, ob die Indizes des Arrays korrekt sind. Und die Elemente des Arrays werden nacheinander an benachbarten Stellen im Speicher gespeichert.

** **.

int name[10];//元素为name[0]~name[9]
name[10]=55;//这个便是错的,该数组元素不存在

** **.

Hinweis: Jedes int ist 2 Byte und char ist 1 Byte. Erweitern Sie übrigens die Beziehung zwischen Bit, Wort, Byte und KB:

KB 1 KB = 1024B

MB 1 MB = 1024 KB

GB 1 GB = 1024 MB

TB 1 TB = 1024 GB

Die Verwendung von Array-Elementen vom Typ int ähnelt der von Variablen vom Typ int. Um beispielsweise den Variablennamen vom Typ int zu lesen, sollten Sie folgendermaßen schreiben

** **.

scanf("%d",&name);//读取变量
scanf("%d",&name[n]);//读取数组

** **.

Gestern haben wir viel für Loops verwendet. Einige Freunde sagten mir, dass so viele Fors unabhängig geschrieben werden können. Ich persönlich empfehle nicht, unabhängig für Loops zu sein. Das Kombinieren von for-Schleifen zu einer Schleife kann das Programm kompakter machen, aber wir müssen auch dem Prinzip der Modularität folgen. Die Modularisierung besteht hauptsächlich darin, das Programm in einige unabhängige Einheiten aufzuteilen. Jede Einheit führt eine Aufgabe aus, die auch die Lesbarkeit des Programms verbessern kann. Noch wichtiger ist, dass durch die Modularisierung die verschiedenen Teile des Programms unabhängig voneinander sind, was für zukünftige Änderungen des Programms praktisch ist.

Wenn wir das Array definieren, wie man es zuweist:

** **.

int name[5]={
    
    1,2,3,4,5};
int name[5]={
    
    1,2,3,4};

** **.

Wenn wir genau hinschauen, werden wir den Unterschied zwischen der ersten und der zweiten Zeile feststellen. In der ersten Zeile werden dem Namen 5 Werte zugewiesen, in der zweiten Zeile jedoch nur 4 Werte. Was ist, wenn einer fehlt? Keine Angst, der Compiler fügt 0 hinzu, kann aber nur 0 hinzufügen.

Als nächstes werden wir Arrays detaillierter vorstellen:

Initialisieren Sie das Array

Arrays werden normalerweise zum Speichern von Daten verwendet, die von Programmen benötigt werden. Beispielsweise kann ein Array mit 12 ganzzahligen Elementen die Anzahl der Tage in 12 Monaten speichern. In diesem Fall ist es besser, das Array zu Beginn des Programms zu initialisieren. Wissen Sie, was eine skalare Variable ist? Einfach ausgedrückt, eine Variable, die nur einen einzigen Wert speichert. Als nächstes initialisieren wir diese Variable:

** **.

float flax=PI*2;/*PI已定义为宏*/
初始化数组:
int main()
{
    
    int name[5]={
    
    1,2,3,4,5};
...}

** **.

Wie oben gezeigt, initialisieren wir das Array mit einer durch Kommas getrennten Liste von Werten (in geschweiften Klammern eingeschlossen), jeder Wert wird durch ein Komma getrennt und es können Leerzeichen zwischen dem Komma und dem Wert stehen. Die obige Initialisierung besteht darin, dem ersten Element des Arrays 1 zuzuweisen (Name [0]).
Lassen Sie uns Ihnen ein einfaches Programm zeigen:

** **.

#include<stdio.h>
int main()
{
    
     const int days[]={
    
    31,28,31,30,31,30,31,31,30,31};
int index;
for(index=0;index<sizeof day/sizeof days[0];index++)
printf("Month %2d has %d days.\n",index+1,days[index]);
return 0;
}

** **.

Die Ergebnisse der Operation sind in der Abbildung dargestellt:

Fügen Sie hier eine Bildbeschreibung ein

Beachten Sie hier folgende Punkte:

NO.1 Wenn wir das obige Array initialisieren, lassen wir die Zahlen in eckigen Klammern weg, und der Compiler bestimmt die Größe des Arrays anhand der Anzahl der Elemente in der Initialisierungsliste.

NO.2 Der Operator Sizeof gibt die Größe (in Byte) des Operanden an. Die Verwendung von Größe der Tage ist die Größe des gesamten Arrays, und Größe des Tages [0] ist die Größe der Elemente im Array. Die Größe des gesamten Arrays geteilt durch die Größe eines einzelnen Elements ist die Anzahl der Array-Elemente.

Geben Sie den Initialisierer an

C99 verfügt über eine neue Funktion: den festgelegten Initialisierer. Verwenden Sie diese Funktion, um das angegebene Array-Element zu initialisieren.

Beispielsweise können Sie in der Initialisierungsliste eckige Klammern verwenden, um die zu initialisierenden Elemente anzugeben:

int shu[6]={[5]=55};//把shu[5]初始化为55

Im Allgemeinen werden nach dem Initialisieren eines Elements die nicht initialisierten Elemente auf 0 gesetzt. Nehmen Sie das folgende Programm als Beispiel:

** **.

#include<stdio.h>
#define months 12
int main ()
{
    
     int days[months]={
    
    31,28,[4]=31,30,31,[1]=29};
int i;
for(i=0;i<months;i++)
{
    
    printf("%2d %d\n",i+1,days[i]);}
return 0;
}

** **.

Führen Sie Folgendes aus:
Fügen Sie hier eine Bildbeschreibung ein

Das Programm muss die folgenden Punkte beachten (Sie müssen mehr darüber nachdenken):

NO.1 Wenn nach dem angegebenen Initialisierer weitere Werte vorhanden sind, z. B. das Fragment in der Initialisierungsliste in diesem Beispiel: [4] = 31,30,31, werden diese letzteren Werte zum Initialisieren von 30 und 31 verwendet.

NO.2 Wenn das angegebene Element erneut initialisiert wird, ersetzt die letzte Initialisierung die vorherige Initialisierung. Beispielsweise werden am Anfang der Initialisierungsliste im obigen Programm die Tage [1] auf 28 initialisiert, aber die Tage [1] werden durch die folgende festgelegte Initialisierung [1] = 29 auf 29 initialisiert.

Apropos Nr. 3: Was ist, wenn die Elementgröße nicht angegeben ist? wie folgt:

** **.

int shu[]={1,[6]=2};//该数组有7个元素
int shu[]={1,[6]=2,3};//该数组有8个元素

** **.

Das heißt: Der Compiler setzt die Größe des Arrays auf einen Wert, der groß genug ist, um initialisiert zu werden.

Array-Grenze

Wenn wir ein Array verwenden, müssen wir verhindern, dass der Array-Index die Grenze überschreitet. Einfach ausgedrückt soll sichergestellt werden, dass der Index ein gültiger Wert ist. sowie:

int you[20];
Wenn Sie dieses Array verwenden, müssen Sie auf den im Programm verwendeten Array-Index im Bereich von 0 bis 19 achten, da der Compiler diesen Fehler nicht erkennt. Ich habe es auch schon erwähnt.

Daher bewirkt die Verwendung eines Array-Index außerhalb der Grenzen, dass das Programm den Wert anderer Variablen ändert. Die Ergebnisse der Ausführung des Programms mit verschiedenen Compilern können unterschiedlich sein, und einige können sogar dazu führen, dass das Programm abnormal abgebrochen wird.

Beachten Sie, dass die Nummerierung der Array-Elemente bei 0 beginnt. Verwenden Sie beim Deklarieren des Arrays am besten symbolische Konstanten, um die Größe des Arrays darzustellen.

Array-Index

Der C99-Standard erlaubt eine neue Art der Deklaration:

int a1 [n]; // Dies war vor c99 nicht zulässig.
Dadurch wurde ein neuer Array-Typ erstellt, der als Array variabler Länge bezeichnet wird. Wird als VLA bezeichnet (C11 hat diese Initiative aufgegeben und VLA als optional festgelegt, nicht als sprachpflichtige Funktion).

C99 führte Arrays variabler Länge ein, um C zu einer besseren numerischen Computersprache zu machen.

Hinweis: Arrays mit variabler Länge beziehen sich auf Arrays, die mit ganzzahligen Variablen oder Ausdrücken deklariert oder definiert wurden. Dies bedeutet nicht, dass sich die Länge des Arrays jederzeit ändert. Die Länge des Arrays mit variabler Länge während seiner Lebensdauer ist ebenfalls festgelegt.

Mehrdimensionale Arrays

Die obige Einführung von Arrays ist fast dieselbe, so dass im Folgenden zweidimensionale und mehrdimensionale Arrays eingeführt werden. Wir können uns ein eindimensionales Array als Datenzeile, ein zweidimensionales Array als Datentabelle und ein dreidimensionales Array als Stapel von Datentabellen vorstellen.

Verwenden Sie nun ein Projekt, um das zweidimensionale Array zu erklären:

Wenn ein Wettermann in 5 Jahren Niederschlagsdaten für jeden Monat sammeln möchte, wie stellt er die Daten dar? Eine Lösung besteht darin, 60 Variablen zu erstellen, und jede Variable speichert ein Datenelement. Offensichtlich ist diese Methode zu mühsam. Dann können wir ein zweidimensionales Array verwenden, um zu lösen, dh ein Hauptarray zu erstellen, das Hauptarray enthält 5 Elemente, jedes Element ist ein Array mit 12 Elementen (jedes Element repräsentiert einen Monat).

Deklarieren Sie das Array wie folgt:

float rain[5][12];
//内含5个数组元素的数组,每个数组元素内含12个float类型的元素
float rain[5][12]  //颜色部分是指rain是一个内含5个元素的数组;非颜色部分则是指一个含有12个float类型元素的数组。

Dies zeigt, dass der Typ jedes Elements float ist [12]. Einfach ausgedrückt ist jedes Element des Regens ein Array, das 12 Werte vom Typ float enthält. Dann ist rain [0] ein Array, das erste Element ist rain [0] [0], das zweite ist rain [0] [1] und so weiter.

Der Projektcode lautet wie folgt:

#include<stdio.h>
#define months 12//12个月
#define years 5//年数
int main()
{
    
    const float rain[years][months]={
    
    
{
    
    4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{
    
    4.1,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{
    
    4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{
    
    4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
{
    
    4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
};//初始化时可省略内部的花括号,只要保证初始化的数值个数正确
int year,month;
float subtot,total;
printf("year    rainfall   (inches)\n");
for (year=0,total=0;year<years;year++)//每一年,各月的降水量总和
{
    
     for(month=0,subtot=0;month<months;month++)
subtot+=rain[year][month];
printf("%5d %15.1f\n",2015+year,subtot);
total+=subtot;} //5年的总降水量
printf("\nThe yearly average is %.1f inches.\n\n",total/years);
printf("monthly averages:\n\n");
printf("Jan Feb Mar Apr May Jun Jul Aug Sep Oct");
printf("Nov Dec\n");
for(month=0;month<months;month++){
    
    
for(year=0,subtot=0;year<years;year++)
subtot+=rain[year][month];
printf("%4.1f",subtot/years);
}
printf("\n");
return 0;
}

Die Ergebnisse sind wie folgt:

Fügen Sie hier eine Bildbeschreibung ein

Dieses Programm berechnet den jährlichen Gesamtniederschlag, den jährlichen Durchschnittsniederschlag und den monatlichen Durchschnittsniederschlag.

Dieses Programm verwendet zwei verschachtelte for-Schleifen. Die erste ist die innere Schleife der verschachtelten for-Schleife. Wenn das Jahr unverändert bleibt, durchläuft es den Monat, um den Gesamtniederschlag in einem bestimmten Jahr zu berechnen. Die äußere Schleife ändert den Wert des Jahres , Den Monat wiederholt durchlaufen, den Gesamtniederschlag für fünf Jahre berechnen.

Hier können wir sehen, dass die Verarbeitung von zweidimensionalen Arrays zweifach verschachtelte Schleifen erfordert. Im Allgemeinen erfordern dreidimensionale Arrays dreifach verschachtelte Schleifen und vierdimensionale Arrays erfordern vierfach verschachtelte Schleifen.

Viele der Inhalte der zweidimensionalen Arrays, über die wir sprechen, sind auf dreidimensionale oder mehrdimensionale Arrays anwendbar. Deklarieren Sie beispielsweise ein dreidimensionales Array wie folgt:

int name [3][3][3];

最后的话

Ich glaube, Sie haben mehr oder weniger über Arrays gelernt. Wenn Sie Arrays besser verstehen möchten, wird empfohlen, sie mehrmals zu lesen. Dies ist auch der wichtigste Wissenspunkt im Array, nachdem Sie viele Male Bücher gelesen haben. Ich hoffe, jeder hat ein besseres Verständnis für Arrays, nachdem er diesen Artikel gelesen hat.

Öffentlicher Account: Programmierer Bob
ist ein Student, der studiert. Gerne können Sie aufpassen und mit mir kommunizieren!
Gefällt mir und folge ~ Danke

Ich denke du magst

Origin blog.csdn.net/m0_46259251/article/details/104706657
Empfohlen
Rangfolge