>> [Jouer de la musique]
DOUG LLOYD: Très bien.
Travailler avec un seul variables est assez amusant.
Mais que faire si nous voulons travailler avec un grand nombre de variables,
mais nous ne voulons pas avoir un tas de des noms différents qui volent autour de notre code?
Dans ce cas, les tableaux sont va venir très pratique.
Les tableaux sont une donnée fondamentale vraiment la structure pour tout langage de programmation
que vous allez utiliser.
Et ils sont vraiment, vraiment utile, en particulier, comme nous le verrons, dans CS 50.
>> Nous utilisons des tableaux de tenir valeurs du même type de données
à des emplacements de mémoire contigus.
Cela revient à dire, il est un façon que nous pouvons groupe
un tas de entiers ensemble dans mémoire ou un tas de personnages
ou flotte dans la mémoire vraiment rapprochées et le travail
avec eux, sans avoir à donner à chaque un son propre nom unique, qui peut
obtenir lourde après un peu de temps.
>> Maintenant, une façon d'assimiler les tableaux est de penser à votre poste local
bureau pour une seconde.
Donc, pas loin de la programmation et il suffit de fermer les yeux
et de visualiser dans votre esprit votre bureau de poste local.
Habituellement, dans la plupart poste bureaux, il ya une grande banque
une des boîtes de bureau de poste sur le mur.
>> Un tableau est un bloc géant de mémoire contiguë,
de la même manière qu'un courrier banque à votre bureau de poste
est un grand espace sur la mur du bureau de poste.
Les tableaux ont été partitionné en petite, blocs de taille identique de l'espace,
dont chacun est appelé un élément, en de la même manière que la paroi du poteau
bureau a été partitionné en petite, blocs de taille identique de l'espace,
que nous appelons une boîte postale.
Chaque élément du tableau peut stocker une certaine quantité de données,
de même que chaque boîte de bureau de poste est en mesure de tenir un certain nombre de messages.
>> Ce qui peut être stockée dans chaque élément de le tableau est des variables de même des données
type, comme int ou char, juste comme dans votre boîte de bureau de poste,
vous ne pouvez ajuster les choses d'un type similaire,
tels que des lettres ou des petits paquets.
Enfin, nous pouvons accéder à chaque élément du le tableau directement par numéro d'index,
tout comme nous pouvons accéder à notre bureau de poste Box par connaître son numéro de boîte aux lettres.
Espérons que, cette analogie vous aide à obtenir votre tête
autour de l'idée de tableaux par une analogie à autre chose
que vous êtes probablement déjà familier avec.
>> En C, les éléments d'un tableau sont indexés à partir de 0, pas de 1.
Et ce qui est vraiment important.
Et en fait, voilà pourquoi nous, au CS 50, et pourquoi les scientifiques informatiques fréquemment
comptera de 0, est en raison de la gamme de C
indexation, qui commence toujours à 0.
Donc, si un réseau est constitué de n éléments, le premier élément de ce tableau
est situé à l'index 0, et le dernier élément de la matrice
est situé à l'index n moins 1.
Encore une fois, si il ya n éléments dans notre tableau, le dernier indice est n moins 1.
>> Donc, si notre réseau dispose de 50 éléments, les premier élément se trouve à l'index 0,
et le dernier élément est situé à l'index 49.
Malheureusement, ou heureusement, en fonction de votre point de vue,
C est très clémente ici.
Il ne sera pas vous empêcher de sortir des limites de votre tableau.
Vous pouvez accéder au moins 3 élément de votre réseau
ou l'élément 59e de votre tableau, Si votre réseau ne dispose que de 50 éléments.
Il ne sera pas arrêter votre programme à partir de la compilation, mais au moment de l'exécution,
vous pouvez rencontrer un erreur de segmentation redouté
si vous commencez à accéder à la mémoire qui est en dehors des limites de ce que
vous avez demandé votre programme pour vous donner.
Donc, ne soyez prudent.
>> Qu'est-ce que un tableau déclaration ressembler?
Comment le code-nous un tableau à l'existence comme nous codons toute autre variable?
Il ya trois parties à un tableau declaration-- un type, un nom,
et une taille.
Ceci est très similaire à un déclaration de variable, qui
est juste un type et un nom, l'élément de taille étant
le cas spécial pour un tableau, parce que nous obtenons un tas d'entre eux
en même temps.
>> Donc, le type est ce genre de variable que vous voulons que chaque élément du tableau soit.
Vous ne voulez à un tableau d'entiers?
Ensuite, votre type de données doit être int.
Voulez-vous que ce soit une tableau de doubles ou de flotteurs?
Type de données devrait être le double ou flotter.
Le nom est ce que vous vouloir appeler votre tableau.
Que voulez-vous de nommer ce géant banque de nombres entiers ou des flotteurs ou des caractères
ou double, ou ce que vous avez?
Que voulez-vous l'appeler?
Assez explicite.
>> Enfin, la taille, ce qui va l'intérieur de crochets,
est le nombre d'éléments que vous le feriez comme votre tableau pour contenir.
Combien d'entiers voulez-vous?
Combien de flotteurs voulez-vous?
>> Ainsi, par exemple, int notes des étudiants 40.
Ceci déclare un tableau appelé Étudiant les qualités, qui se compose de 40 nombres entiers.
Assez explicite, je l'espère.
Voici un autre exemple.
Double prix du menu 8.
Cela crée un tableau appelé Les prix des menus, qui consiste
de place en mémoire pour huit doubles.
>> Si vous pensez que de chaque élément d'un tableau de type de type de données,
Ainsi, par exemple, un seul élément de un tableau de type int, de la même manière que vous
penserait de tout autre variable de type int,
toutes les opérations que l'on familiers discuté précédemment dans les opérations
vidéo prendra tout son sens.
Donc, ici, nous pourrions déclarer un tableau des booléens appelés Truthtable,
qui se compose de la place pour 10 booléens.
>> Et puis, comme tout nous pouvions assigner une valeur à une autre variable de type
Boolean, on pourrait dire quelque chose comme Truthtable crochet
2, qui est la façon dont nous indiquons, lequel élément de la table de vérité?
Le troisième élément de la table de vérité, car rappelez-vous,
nous comptons de 0.
Voilà donc comment nous indiquons le troisième élément de la table de vérité.
Truthtable 2 est égale à faux, tout comme nous pourrions declare--
ou nous pourrions céder, plutôt, toute Variable de type booléen est faux.
>> Nous pouvons également l'utiliser dans des conditions.
if (7 == truthtable vrai), ce qui veut dire,
si la huitième élément de Truthtable est vrai,
peut-être que nous voulons imprimer un message pour l'utilisateur, printf ("TRUE! n") ;.
Cela nous amène à dire Truthtable 10 équivaut vrai, non?
Eh bien, je peux, mais il est assez dangereux, rappelez-vous, parce que,
nous avons un tableau de 10 booléens.
Alors que l'indice le plus élevé le compilateur nous a donné est 9.
>> Ce programme va compiler, mais si quelque chose dans la mémoire
existe où nous attendre Truthtable 10 pour aller,
nous pourrions souffrir d'une erreur de segmentation. nous pourrait sortir avec elle, mais en général,
assez dangereux.
Donc ce que je fais ici est C juridique, mais pas nécessairement le meilleur coup.
Maintenant, lorsque vous déclarez et initialiser un tableau en même temps,
il ya en fait une jolie syntaxe spéciale que vous
peut utiliser pour remplir le tableau avec les valeurs de départ.
Il peut devenir lourd à déclarer un tableau de taille 100,
et d'avoir à dire, l'élément 0 est égal à cette; élément 1 est égal à cette;
élément 2 est égale à celle.
Quel est le point, non?
>> Si il est un petit tableau, vous pourrait faire quelque chose comme ça.
Bool truthtable 3 est égal ouverte accolade puis virgule
séparer la liste des éléments que vous voulez mettre dans le tableau.
Ensuite, fermez bouclés accolade virgule.
Cela crée un tableau de la taille de trois appelé Truthtable,
avec des éléments faux, vrai, et le vrai.
Et en fait, l'instanciation Je dois syntaxe est ici
exactement la même chose que faire la élément individuel syntaxe ci-dessous.
Ces deux façons de codage devraient produire le même tableau exact.
>> De même, nous pourrions parcourir sur l'ensemble des éléments
d'un tableau en utilisant une boucle qui, en fait, est très fortement recommandé
à domicile exercice.
Comment créez-vous un tableau de 100 nombres entiers, où
chaque élément du tableau est son indice?
Ainsi, par exemple, nous avons un réseau de 100 des nombres entiers, et dans le premier élément,
nous voulons mettre 0.
Dans le deuxième élément, nous voulons mettre 1.
Dans le troisième élément, nous voulons de mettre 2; Ainsi de suite.
Voilà une très bonne à domicile exercice à faire cela.
>> Ici, il ne semble pas comme on a trop changé.
Mais noter que dans entre le crochets, cette fois,
Je l'ai effectivement omis le numéro.
Si vous utilisez cette très instanciation spéciale
syntaxe pour créer une tableau, vous faites réellement pas
besoin pour indiquer la taille de la matrice à l'avance.
Le compilateur est assez intelligent de savoir que vous avez réellement
veulent un tableau de taille 3, parce que vous mettez trois éléments
à la droite du signe égal.
Si vous aviez mis quatre, il aurait vous donné une table de vérité de la taille de quatre;
Ainsi de suite.
>> Les tableaux ne sont pas limités à un seul dimension, qui est plutôt cool.
Vous pouvez effectivement avoir autant prescripteurs secondaires que vous le souhaitez.
Ainsi, par exemple, si vous voulez créer un conseil pour le jeu Battleship, qui,
si vous avez déjà joué, est un jeu qui est joué avec des chevilles sur le 10 par 10 grille,
vous pouvez créer un tableau comme celui-ci.
Vous pourriez dire Bool cuirassé support carré de 10
carré fermé crochet console 10 fermé crochet.
>> Et puis, vous pouvez choisir de interpréter cela dans votre esprit comme un 10
par 10 les cellules de la grille.
Maintenant, en fait, dans la mémoire, il fait vraiment juste
rester un élément 100, dimensionnel unique.
Et cela, en fait, va pour si vous avoir trois dimensions ou quatre ou cinq.
Il n'a vraiment pas simplement multiplier la totalité de la indices--
ou la totalité de la taille specifiers-- ensemble,
et vous obtenez juste une unidimensionnel tableau de cette taille.
>> Mais en termes d'organisation et de visualisation et la perception humaine,
il peut être beaucoup plus facile de travailler avec une grille
si vous travaillez sur un jeu comme Tic-tac-toe ou Battleship,
ou quelque chose comme ça.
Il est une grande abstraction, au lieu de devoir
de penser à un tic-tac-toe carte comme une ligne de neuf
carrés ou un conseil Battleship comme une ligne de 100 carrés.
A 10 10 par une grille ou trois par trois grille est probablement
beaucoup plus facile à percevoir.
>> Maintenant, quelque chose de vraiment importante sur les tableaux.
Nous pouvons traiter chaque personne élément de la matrice en tant que variable.
Nous avons vu que, plus tôt quand nous étions assignons
la vraie valeur de certaines booléens ou les tester dans conditionnelles.
Mais nous ne pouvons pas traiter l'ensemble de eux-mêmes des tableaux comme variables.
Nous ne pouvons pas, par exemple, affecter un tableau à un autre tableau en utilisant l'affectation
opérateur.
Il est pas C. juridique
>> Si nous voulons, par ce example-- nous ferions dans cet exemple
serait de copier un tableau dans un autre.
Si nous voulons le faire, nous avons fait avoir besoin d'utiliser une boucle pour copier sur
chaque élément individuel à la fois.
Je sais qu'il est un peu de temps.
>> Ainsi, par exemple, si nous avions ces quelques de lignes de code, cela fonctionnerait?
Eh bien, non, il ne serait pas, non?
Parce que nous essayons d'attribuer à la barre alimentaire.
Cela ne va pas au travail, car il est un tableau,
et nous venons de décrire que cela ne C. juridique
>> Au lieu de cela, si nous voulons copier le contenu de la nourriture
dans la barre, ce qui est nous essayons de faire ici,
nous aurions besoin d'une syntaxe comme ça.
Nous avons une boucle qui va à partir de J est égal à 0 à 5,
et on incrémente J à chaque itération de la boucle et attribuer des éléments comme ça.
Cela entraînerait également un bar étant un, deux, trois, quatre, cinq,
mais nous devons le faire de cette très chemin élément par élément lente,
au lieu de juste par copier l'ensemble du réseau.
Dans d'autres programmes langues, plus modernes,
vous pouvez, en fait, faire juste aussi simple que cela équivaut à la syntaxe.
Mais C, malheureusement, nous sommes pas autorisés à le faire.
>> Maintenant, il ya un autre chose que je tiens à mentionner
sur les tableaux qui peuvent être un peu peu difficile la première fois que vous
travailler avec eux.
Nous avons discuté dans une vidéo à propos de la portée des variables,
que la plupart des variables dans C, lorsque vous appelez les fonctions, sont passés par valeur.
Vous rappelez-vous ce que cela signifie passer quelque chose par sa valeur?
Cela signifie que nous faisons une copie de la la variable qui a été adoptée en.
La fonction de l'appelé, la fonction que cela recevoir la variable,
ne prenez pas la variable elle-même.
Il obtient sa propre locale copie à travailler avec.
>> Tableaux, bien sûr, ne ne pas suivre cette règle.
Plutôt, ce que nous appelons cette est en passant par référence.
L'appelé effectivement ne recevoir le tableau.
Il ne reçoit pas sa propre copie locale de celui-ci.
Et si vous pensez il, cela fait sens.
Si les tableaux sont très grandes, il prend tellement de temps et d'efforts
de faire une copie d'un tableau de 100 ou 1000 ou 10.000 éléments,
qu'il vaut pas la peine pour une fonctionner pour recevoir une copie de celui-ci,
faire un travail avec elle, puis juste être fait avec la copie;
il n'a pas besoin d'avoir il traîner plus.
>> Car les tableaux sont quelques-uns volumineux et encombrant,
nous venons de passer entre eux par référence.
Nous venons de confiance que la fonction à ne pas casser quelque chose.
Donc, il ne reçoit en fait le tableau.
Il ne peut pas faire sa propre copie locale de celui-ci.
>> Qu'est-ce que cela signifie, puis, quand l'appelé
manipule les éléments du tableau?
Ce qui se produit?
Pour l'instant, nous allons Gloss plus exactement pourquoi ce
qui se passe, pourquoi les tableaux sont passés par référence
et tout le reste est passé par valeur.
Mais je vous promets, nous allons revenir et de vous donner la réponse
pour cela d'une vidéo plus tard.
>> Voici encore un exercice pour vous Avant de terminer les choses sur les tableaux.
Le tas de code ici, qui est pas particulièrement bon style,
juste que je vais faire cette mise en garde.
Il n'y a pas de commentaires ici, ce qui est assez mauvaise forme.
Mais il est seulement parce que je voulais être capable de tenir tout sur l'écran.
>> Au sommet, vous pouvez voir que je dois deux déclarations de fonction pour ensemble gamme
et mettre int.
Set tableau prend apparemment un tableau de quatre nombres entiers comme son entrée.
Et ensemble int prend apparemment un seul entier comme son entrée.
Mais deux d'entre eux ne disposent pas d'une sortie.
La sortie, le retour taper, de chacun est nulle.
En principal, nous avons une quelques lignes de code.
Nous déclarons une variable entière appelé A et lui attribuer la valeur 10.
Nous déclarons un tableau de quatre entiers appelé B et affecter les éléments 0, 1,
2 et 3, respectivement.
Ensuite, nous avons un appel à mettre en int et un appel pour régler tableau.
Les définitions de jeu tableau et ensemble int sont bas, au fond.
>> Et donc, encore une fois, je vous pose la question.
Ce qui est imprimé ici à la fin du Main?
Il ya un col d'impression. Je suis imprimant deux entiers.
Je imprimer le contenu de A et le contenu du support carré B 0.
Mettre en pause la vidéo ici et de prendre une minute.
Pouvez-vous imaginer ce que cela fonction permet d'imprimer à la fin?
Espérons que, si vous vous souvenez du distinction entre passant par valeur
et passant par référence, ce problème était pas trop difficile pour vous.
Et la réponse vous le feriez ai trouvé est présent.
Si vous ne savez pas vraiment à pourquoi cela est le cas, prendre une seconde,
revenir en arrière, passer en revue ce que je étais juste en discutant sur les tableaux passant
par référence, par rapport passant d'autres variables, en valeur,
et espérons-le, ça va faire un peu plus de sens.
>> Je suis Doug Lloyd, et ceci est CS50.