Initialisation d'un tableau 2D int en mode exécution
-
07-07-2019 - |
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.
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.
-
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.
-
Voir ci-dessus.
-
L'astérisque sert à la multiplication.
-
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.