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.

War es hilfreich?

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.

  1. 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.

  2. Siehe oben.

  3. Asterisk ist für die Multiplikation.

  4. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top