Question

J'ai reçu le code ci-dessous d'un livre C ++ et je ne comprends pas comment fonctionne l'initialisation.

D'après ce que je peux voir, il y a un extérieur pour le cycle en boucle dans les lignes et la boucle intérieure cyclisme à travers la colonne. Mais c’est l’affectation des valeurs dans le tableau que je ne comprends pas.

#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;
}

alors voici quelques questions.

  • Je ne comprends pas l'initialisation du tableau 2D international nums [3] [4] . Qu'est-ce qui sépare le (t * 4) + i + 1 , afin que le compilateur sache quoi attribuer où?
  • Comment savoir quelles valeurs seront stockées dans les lignes et les colonnes en fonction des valeurs attribuées?
  • Pourquoi y a-t-il un astérisque?
  • Quelles sont les parenthèses autour de t * 4 pour?

Je comprends que les tableaux à deux dimensions d'initialisation ressemblent à l'exemple suivant.

#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;
}

Et d'après ce que je sais, comme cela en mémoire.

  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

Merci.

Était-ce utile?

La solution

(t*4)+i+1

Est une expression arithmétique. t et i sont ints, les * moyens se multiplient. Donc, pour la ligne 1, colonne 2, t = 1, i = 2 et nums [1] [2] = 1x4 + 2 + 1 = 7.

Oh, j'ai oublié deux choses. Tout d'abord, le () doit spécifier l'ordre des opérations. Donc, le t * 4 est fait en premier. Notez que dans ce cas, la () n’est pas nécessaire, car l’opérateur multiply a toujours priorité sur l’opérateur plus.

En outre, votre question ne permet pas de savoir si vous le saviez déjà ou non, mais la signification des lignes [t] [i] est la notation de tableau permettant d'accéder aux lignes des lignes t et de la colonne i.

Autres conseils

Pour la première partie, ne donne-t-on pas simplement une valeur égale au numéro de ligne * 4 plus le numéro de colonne? C'EST À DIRE. le résultat final de la mission devrait être:

1  2  3  4
5  6  7  8
9 10 11 12

Ainsi, l'expression (t * 4) + i + 1 signifie "4 multiplié par le numéro de ligne plus le numéro de colonne plus 1". Notez que le numéro de ligne et le numéro de colonne dans ce cas commencent à 0.

  1. nums [t] [i] est le seul endroit du tableau auquel il attribue la valeur de (t * 4) + i + 1.

    Donc si t = 1 et i = 1, le nombre de points [1] [1] sera égal à (1 * 4) + 1 + 1, ce qui correspond à 6.

  2. Voir ci-dessus.

  3. L'astérisque sert à la multiplication.

  4. Vous faites d'abord ce qui est dans le () comme dans n'importe quelle équation mathématique.

Permet de voir, vous avez

int t,i, nums[3][4];

où nous réservons de l'espace pour le tableau 2d. Les valeurs à l'intérieur du tableau auront des valeurs aléatoires puisque vous ne réservez que de l'espace.

La ligne:

nums[t][i] = (t*4)+i+1; //I don't understand this part/line

Attribue les valeurs au tableau. Vous avez t et i qui sont des compteurs de boucle et la ligne (t * 4) + i + 1 signifie, prenez la valeur de t, multipliez par 4, plus i et plus 1.

Donc pour t = 0, i = 0, vous obtenez que nums [0] [0] a la valeur (0 * 4) + 0 + 1, qui est 1 .. etc pour tout le reste.

Et bien sûr, le () ne sont que des parenthèses mathématiques de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top