Initialisieren von 2D-int-Array in der Laufzeit
-
07-07-2019 - |
Frage
Ich habe den Code unten aus einem C ++ Buch, und ich kann nicht herausfinden, wie die Initialisierung funktioniert.
Von dem, was ich sehen kann, gibt es eine äußere for-Schleife cycling die Zeilen Trog, und die innere Schleife cycling Trog die Säule. Aber sein ist die Zuordnung der Werte in das Array, das verstehe ich nicht.
#include <iostream>
using namespace std;
int main()
{
int t,i, nums[3][4];
for(t=0; t < 3; ++t) {
for(i=0; i < 4; ++i) {
nums[t][i] = (t*4)+i+1; //I don't understand this part/line
cout << nums[t][i] << ' ';
}
cout << '\n';
}
return 0;
}
so sind hier einige Fragen.
- Ich kann die Initialisierung des 2D-int Array
nums[3][4]
verstehen. Was trennt die(t*4)+i+1
, so dass der Compiler weiß, was wo zuweisen? - Wie kann ich wissen, welche Werte in den Zeilen und Spalten gespeichert werden, basierend auf welchen Werten zugewiesen wurde?
- Warum gibt es ein Sternchen?
- Was sind die Klammern um
t*4
für?
verstehe ich, dass die Initialisierung zweidimensionale Arrays aussehen wie das folgende Beispiel.
#include <iostream>
using namespace std;
int main() {
char str[3][20] = {{"white" "rabbit"}, {"force"}, {"toad"}}; //initialize 2D character array
cout << str[0][0] << endl; //first letter of white
cout << str[0][5] << endl; //first letter of rabbit
cout << str[1][0] << endl; //first letter of force
cout << str[2][0] << endl; //first letter of toad
return 0;
}
Und von dem, was ich weiß, wie diese im Speicher.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 w h i t e r a b b i t 0
1 f o r c e 0
2 t o a d 0
Danke.
Lösung
(t*4)+i+1
Ist ein arithmetischer Ausdruck. t und i Ints bedeutet die * multiplizieren. Also für Zeile 1, Spalte 2, t = 1, i = 2 und nums [1] [2] = 1x4 + 2 + 1 = 7.
Oh, vergaß ein paar Dinge. Zuerst wird die () die Reihenfolge von Operationen zu spezifizieren. So ist die t * 4 zuerst getan. Beachten Sie, dass in diesem Fall die () ist nicht erforderlich, da der mehrfach Operator Vorrang vor dem Plus-Operator nimmt sowieso.
Auch konnte ich nicht von der Frage sagen, ob Sie diese schon kennt oder nicht, aber die Bedeutung der Zeilen [t] [i] Array-Notation für die Zeilen in Zeile t und Spalte i zugegriffen wird.
Andere Tipps
Für den ersten Teil, wird es nicht die Zuweisung nur den Wert gleich der Zeilennummer * 4 und der Spaltennummer? I.E. das Endergebnis der Zuordnung sein sollte:
1 2 3 4
5 6 7 8
9 10 11 12
So ist der Ausdruck (t * 4) + i + 1 bedeutet "4 multipliziert mit der Zeilennummer und die Spaltennummer plus 1". Beachten Sie, dass die Zeilennummer und Spaltennummern in diesem Fall starten 0.
-
nums [t] [i] ist die eine Stelle in dem Array sie den Wert zuweist (t * 4) + i + 1.
Also, wenn t = 1 und i = 1, dann die Stelle num [1] [1] wird gleich (1 * 4) + 1 + 1, die 6 ist.
-
Siehe oben.
-
Asterisk ist für die Multiplikation.
-
Sie tun, was in dem () zunächst wie eben in jeder mathematischen Gleichung.
Mal sehen, Sie haben
int t,i, nums[3][4];
, wo wir Platz für den 2D-Array zu reservieren. Die Werte innerhalb des Arrays werden, da Sie nur reservierter Platz Zufallswerte haben.
Die Zeile:
nums[t][i] = (t*4)+i+1; //I don't understand this part/line
Ordnet die Werte in das Array. Sie haben und t i die Schleifenzähler sind, und die Linie (t * 4) + i + 1 bedeutet, nehmen Wert von t, Multiplizieren mit 4, plus i und plus 1.
Also für t = 0, i = 0, Sie bekommen, dass nums [0] [0] Wert (0 * 4) + 0 + 1, die 1 .. etc für alles andere.
Und natürlich die () sind nur grundlegenden mathematischen Klammern.