ANDI PENG: Très bien.
Bienvenue à la quatrième semaine de l'article.
C'est une belle journée ici à New Haven
donc je pense vraiment que le clairsemée dispersion des enfants qui
m'a rejoint pour la section d'aujourd'hui, je vous remercie.
>> Alors vite, juste avant que nous commencer, l'ordre du jour pour aujourd'hui.
Nous allons aller sur une quelques brèves annonces.
Nous avons un calendrier vraiment loufoque à venir dans les deux prochaines semaines
ou alors si nous allons revenir là-dessus.
Deuxièmement, je sais topic-- préférée de tout le monde
Je suis sûr que ce fondu votre esprit lors de conférence, ne vous inquiétez pas,
Je encore un peu de ne pas l'obtenir.
C'est bien.
C'était une blague.
Je fais effectivement obtenir.
Mais je ferai en sorte que vous les gars obtenir, aussi.
Donc, nous allons passer un vraiment, vraiment bonne quantité
de temps à parler pointeur aujourd'hui.
Comme vous pouvez le voir, Candy talk est énorme aujourd'hui.
Nous allons vraiment à garder that-- oui, tout à fait.
Continuez à prendre des bonbons.
Je vais les faire circuler en ce moment.
Pas de soucis.
Nous allons vraiment essayer pour garder le sucre dans le sang de personnes
parce que le cerveau va brûler un peu d'oxygène aujourd'hui parce pointeurs
sont vraiment, vraiment dur.
Ensuite, nous allons parler gestion de la mémoire qui est du genre
dans le même domaine.
Et nous allons passer à la redirection et le fichier
I / O qui sont la syntaxe juste, agréable choses que nous devrions parler.
Et puis enfin, je suis vais essayer une fois de plus
partir comme 10, 15 minutes pour pset4.
Cela est dû dans quelques jours donc nous sommes va vraiment une sorte de vous donner
quelques conseils utiles si vous Vous avez déjà commencé à ce sujet.
Frais.
D'ACCORD.
Ainsi, certaines annonces pour cette semaine à venir.
Classement.
Je ne sais pas vraiment à ce point combien d'entre vous
les gars sont en fait dans mon vous section-- OK il?
D'ACCORD.
Mais, pour ceux d'entre vous qui sont dans ma section,
juste un couple commente classement.
>> Première travail vraiment bon de commenter,.
Ceux d'entre vous qui ne commentons pas, vous savez qui vous êtes parce que vous avez probablement
obtenu quelques points de style sonné cette semaine.
Assurez-vous que dans l'ensemble de votre programmes ajouter quelques commentaires.
Vraiment, le style est vraiment facile à obtenir des points correctes comme un champ.
Donc, pour nous, juste faire assurer que vous êtes genre
d'ajouter une brève description dans tous les vos programmes sur ce que vous faites.
>> Secondly-- cela est un énorme problème pour beaucoup de l'AT cet week-- passé
alors assurez-vous de télécharger à le dossier correct avec correctement
programmes nommés.
Et la raison pour laquelle nous demandons pour cela est parce que nous, dans le cadre du classement,
fait exécuter un script sur votre code qui télécharge automatiquement
tous vos psets, exécute des tests de régularité sur chacun d'eux,
et télécharge ensuite vos scores directement dans le carnet de notes.
Cependant, à tout moment, si vous nom de votre programme de manière incorrecte,
il bousille tout le programme pour tout le monde.
>> Et donc, légitimement, cette belle écriture
que nous avons écrit que le fait tout cela pour nous, complètement
se bloque si vous ne disposez pas votre programme nommé correctement.
Donc, il suffit de télécharger à la bonne dossier, ont eux, nommé correctement,
puis la vie est bonne.
Je reçois vos psets retour à vous les gars antérieures
parce que je reçois au grade rapidement.
Ouais.
D'ACCORD.
Et aussi, nous allons parler about-- Yale a une vraiment, vraiment
calendrier loufoque dans ces deux prochaines semaines.
Donc ceux d'entre vous les gars au Harvard, cela ne vaut pas.
Mais pour nous enfants adorables à Yale nous avons quelque chose appelé automne break-- désolé,
Harvard-- où nous avons cinq jours de congé de l'école.
Et tout cela est beau, il sorte de mess notre rythme pset
parce psets sont dus jeudi vendredi.
Et si nous ne sommes pas ici Jeudi, vendredi, nous
ne peut pas avoir un travail pour vous les gars due le jeudi, vendredi.
>> Donc, ce que nous allons faire est-- nous sommes comme 99% sûr que ce soit ce qui se passe,
il peut y avoir certaines changer, mais je pense qu'il est
subtle-- est que nous allons have-- cette semaine est normal.
Donc, nous avons notre section sur Mardi suivie par les heures de bureau
dans le reste de la semaine puis pset4 est dû le vendredi.
Puis, comme vous les gars savent tout, comme Je vous ai rappelé les gars la semaine dernière,
nous avons notre quiz 0 venir le mercredi.
>> Et donc, être un étudiant moi-même, Je sais que très peu d'entre vous
les gars seront effectivement travaillent sur pset5 les deux jours avant votre quiz.
Donc, ce que nous allons probablement finir par faire est,
que lundi soir, nous allons au fait de 5h30 à 7h00,
avoir un bref examen séance sur les sujets abordés.
Incertain si elle est un session d'examen ou d'un Q & A.
Ce sera une sorte de révision forme sous laquelle nous couvrirons
certains sujets pertinents pour vous les gars.
>> Et puis lundi et mardi nuits de cette semaine 8:00-11h00,
nous allons avoir des heures de bureau.
Ces heures d'ouverture seront les plus probablement plus de tout juste d'arriver,
AT poser vos questions concernant tous les concepts que vous êtes confus au sujet,
et ils vont sorte d'aller avec toi et examiner les concepts pour le quiz.
Quiz 0, si vous êtes dans le Lundi, la section mercredi
sera les mercredis de cours class-- mercredi pendant la classe.
Et puis, si vous êtes dans le Mardi, la section jeudi
sera également en classe jeudi.
Vous ne pouvez pas vraiment choisir celui que vous allez.
Si vous êtes un lundi, mercredi, vous devez aller au mercredi.
Si vous êtes le mardi, jeudi vous devez aller au jeudi.
Mais alors que la nuit, nous le personnel est charmant, sera
avoir un quiz géant classement parti que nous aurons vos scores de nouveau à vous
cette nuit.
À quelle heure?
Manque de clarté, qui sait, mais il sera être de retour dans les 24 heures
de sorte que vous les gars, espérons- avoir une certaine rétroaction d'ici vendredi.
>> Et puis nous avons une semaine vraiment loufoque.
Donc pset5 est l'un des psets plus difficiles de l'année.
Gars tellement désolé.
Qu'est-ce que nous allons essayer de faire est que nous allons avoir
un soutien réel que le week-end.
Parce que, comme vous les gars peut le voir, le pset est dû avant la pause de l'automne.
Nous ne disposons pas pour le soutien vous les gars pendant les vacances d'automne
et donc nous avons vraiment une sorte de vouloir que cette phrase,
nous allons en finir avec ça, nous allons travailler vraiment, vraiment dur
ces deux prochaines semaines, obtiennent ce quiz et d'ajouter ces deux psets fait avec
puis vous les gars ont une belle détente sept jours sans penser à CS.
>> Donc, pour que la arriver, nous sommes probablement
aller à déplacer ma section à dimanche après-midi.
Il sera filmé donc pas soucis si vous ne pouvez pas venir.
Mais le tournage en ligne sera être là et accessible
de sorte que vous les gars ont Dimanche, Lundi, mardi, pour travailler sur pset5.
Et puis, il est l'automne rompre et aucune CS puis
nous revenons et son retour dans la mouture.
>> Mais ça va être un belle semaine pour les vacances d'automne
et nous voulons vraiment faire le stress gratuit pour tout le monde que possible, qui
est pourquoi nous avons déplacé le pset serait due avant la pause d'automne plutôt qu'après.
Parce it's-- Je veux dire, je me sens un peu comme il défait le but d'avoir
la date limite après la pause de l'automne si il ya de toute façon pas de soutien pendant les vacances d'automne.
Donc, il est rather-- je pense nous préférons concentrer là-dessus maintenant.
Quelqu'un at-il des questions à propos de ce calendrier?
Tout confus?
Ouais.
>> AUDIENCE: Avons-nous encore une conférence sur le 21?
ANDI PENG: Ouais.
Donc, le 21, il va être une conférence qui est en direct de Harvard.
Je ne sais pas si David est le tournage ou si il a fait des conférences,
mais ça va être disponible en ligne pour vous les gars à l'accès.
Donc, assurez-vous de tailler une heure quelque part dans la rupture de l'automne
si vous les gars peuvent attraper sur cette conférence.
Ouais?
>> AUDIENCE: Ouais.
Pardon.
Je suis arrivé ici un couple--
>> ANDI PENG: Pas de soucis.
Tenez, prenez des bonbons.
>> AUDIENCE: Hé, je pris cela.
Donc, pour récapituler, pas demain mais le Mercredi après cela, nous avons un quiz.
ANDI PENG: Exact.
Public: Et ça va être-- ce qui est le format du quiz?
ANDI PENG: Oh.
Donc, nous allons envoyer un e-mail qui couvre tout ce que plus en profondeur.
Mais, essentiellement, il couvre tout juste les sujets de base déjà couverts
dans la première moitié du semestre.
Nous aurons des séances de révision et la question et des réponses donc pas de soucis à ce sujet.
Mais nous irons plus que trop.
Public: Est-ce que ce sera, nous apporter à nos ordinateurs et le code there--
PENG ANDI: Non
Il va être vous les gars écriture et répondre aux questions à la main.
>> AUDIENCE: Oh.
>> ANDI PENG: Donc, nous allons donner pratiques et des trucs sur
si vous les gars peuvent vouloir aller peut-être arrière et réécrire à la main Mario juste
Pour vous assurer de gars ont une idée de la façon de le faire.
Parce que parfois, quand vous écrivez à la main vous
oublier des points-virgules et des trucs et ce est vraiment mauvais.
AUDIENCE: Sera-ce pas [inaudible]?
Comme, vous obtenez un point-virgule sur your--
>> ANDI PENG: Oui et non.
Nous parlerons plus en profondeur En ce qui concerne la façon dont la mise en page de quiz est
et comment nous allons grade.
Mais essentiellement, il suffit de savoir que le format général va vous être
gars soit l'interprétation code-- répondre à des questions de base.
Si je vous ai demandé, ce qui est une bibliothèque?
Vous devriez savoir ce qu'est un bibliothèque fait et écrire que vers le bas.
Ou je peux dire, écrire un programme qui Bonjour tout le monde imprime à l'écran.
Les gars, vous écrirait, int main vide printf bonjour virgule monde.
Ouais.
>> Auditoire: Alors, ça ne va pas être nulle part [inaudible]
niveau du problème de difficulté réglé?
>> PENG ANDI: Non
Non.
Nous won't-- ouais.
Ecrire la totalité de la jeu de 15 à 20 minutes, aller.
Non, ce ne sera pas que.
Non.
AUDIENCE: OK.
Voilà donc mercredi.
Au cours de cette semaine, nous avons aussi ont le problème le plus difficile définir?
PENG ANDI: Non
Donc, le problème réglé ce dû le jour avant la pause de l'automne.
Le schedule-- l'e-mail a été effectivement envoyer
Il ya 20 minutes au sujet de tout cela.
Alors vous les gars il suffit de vérifier vos e-mails.
Il sera là.
Ouais.
Pas de soucis.
Frais.
>> Vous avez des questions générales concernant annonces, classement, des quiz,
Avant de nous plonger à droite dans pointeurs qui consommera
la majorité de notre temps de section aujourd'hui?
Frais.
Bien.
Donc, avez-vous les gars regarder tout cela lovely-- Je ne sais pas ce qu'ils appellent.
La chose où le claymation se fait sauter parce qu'il
ne pas utiliser correctement un pointeur.
Eh bien, votre programme va probablement sauter lui-même si vous
ne pas utiliser des pointeurs correctement ainsi.
Donc, nous allons faire assurer que cela ne se produise pas.
>> Aujourd'hui, nous allons faire un peu de fun pointeur.
Je vais aller sur les choses aussi bien que je pense
est possible dans un petit cadre de temps.
Mais il ya tellement de choses à couvrir que je veux vraiment vous les gars,
si vous ne comprenez pas quelque chose, à ne pas me laisser continuer.
Parce que si vous ne le faites pas comprendre quelque chose,
vous allez probablement pas à comprendre ce que je dis après.
Donc, s'il vous plaît arrêter de me poser une question.
Parce qu'il toutes sortes de boules de neige ensemble.
Comme, pointeurs mènent dans La mémoire du plomb dans d'autres choses.
Et si vous ne comprenez pas les pointeurs, arrêter moi et nous allons le découvrir
et la vie sera belle.
>> Frais.
Donc, combien d'entre vous les gars en conférence, quand David mentionné pointeurs,
vos cerveaux sorte de transformer en Jell-O?
Ouais.
Bien.
Nous allons essayer de de-Jell-O vos cerveaux aujourd'hui.
Nous allons vraiment systématiquement passer par ce qu'est exactement un pointeur est,
ce qu'il fait, et comment nous les utilisons.
>> Donc tout pointers-- sorte normalement avec les variables
nous avons utilisé dans le codage, comme variables telles que entiers ou des chaînes
ou flotteurs, ils sont tous essentiellement une valeur qui leur est attribuée
ainsi que d'une adresse pointant vers cette valeur.
Donc, je vais dessiner ce droit maintenant.
Nous avons presque pas de craie, mais qui est OK.
>> Ainsi, par exemple, normalement la façon dont nous avons
été en utilisant des variables est que nous créons la nom de la variable de type int, nous allons
dis le.
Donc, ici, nous avons int x et nous sommes initialisation que int à 50.
Donc, ici, dans ce bloc de mémoire sur notre ordinateurs nous avons stockées un certain nombre de 50.
Alors, où entrent en jeu des pointeurs est que votre ordinateur itself-- comme, ici,
physiquement sur le disque dur dans la RAM de mon computer--
il ne dispose que d'une quantité limitée de mémoire.
Vous ne pouvez pas juste garder stocker des choses sur le dessus des choses sur le dessus des choses
et les avoir tous.
>> Ainsi, la manière que nous attribuons dynamiquement mémoire pour pouvoir stocker ce que nous voulons
et d'y accéder, est d'avoir des pointeurs.
Alors, imaginez dans votre espace mémoire, à droite.
Si tel est le RAM de votre ordinateur, vous avez ces petits morceaux
ou des blocs ou des octets de mémoire dans qui-- ce sont juste un peu
blocs qui ont été alloués sur le disque dur ou RAM de votre ordinateur,
et dans chacune de ces blocs vous pouvez stocker des choses différentes.
Ainsi, par exemple, une tableau dans cet exemple
ici est un octet qui est constitué de huit bits.
Le nombre varie en fonction du système d'exploitation de votre ordinateur.
Par exemple, combien d'entre vous ont entendu parler de 32-bits et exploitation 64 bits
systèmes?
Exactement.
>> Donc tout ce qui est dit est que la memory--
que que votre ordinateur la manière gère la mémoire est différent.
Qui est pourquoi il est vraiment important de comprendre
pourquoi les fonctions de la mémoire elle-même plutôt de prêter attention aux chiffres.
Donc, nous ne nous soucions pas vraiment la taille de ce tableau
est, nous avons juste besoin de se soucier comment grande avons-nous besoin d'un int être,
comment grande avons-nous besoin d'une chaîne être, comment grande est un pointeur?
D'ACCORD.
Donc, ça va être beaucoup du lourd, dense informations.
Je vais vous donner un gars quelques moments comiques de secours ici.
Vous devriez tous être en mesure à comprendre cela maintenant.
Parce que nous savons que pointeurs sont des adresses,
et ceux qui sont différentes à partir de variables.
D'ACCORD.
Frais.
CS blagues sont le meilleur, ouais?
>> Donc, la façon dont nous allons sur la création d'un pointeur
est un genre très spécifique de la syntaxe.
Comme avec toute la création type de variable, il est
va être un spécifique la syntaxe que nous utilisons pour créer.
Ainsi, lorsque la déclaration de tout pointeur, un pointeur est juste essentially--
Je pense que l'importante partie de pointeurs est
alors que la variable a à la fois une valeur et une adresse,
un pointeur est une adresse.
Sa valeur est une adresse.
Donc, il est une adresse stockée à une adresse différente.
Si cela a du sens.
Nous allons passer en revue plus en détail, mais qui est la forme générique
pourquoi-- de la façon dont une imprimante est stocké.
>> Donc, la façon dont vous créez un pointeur est en faisant ce type de données
que le pointeur va être le référencement et alors--
avec la star-- et ensuite le nom du pointeur.
Donc, ici, si nous voulions pour créer un pointeur qui
pointé vers un entier, et nous voulait le nom du pointeur soit x,
nous ferions int star du x.
Ouais?
>> Public: Et si la ligne suivante vous
faire int x, int sera la star du x indiquer l'emplacement de la x
vous définissez la suite?
>> ANDI PENG: très bonne question.
Nous allons passer en revue dans cette un couple glisse plus tard.
Ouais.
Et puis même chose avec omble chevalier et même flotteurs chose.
Il suffit de savoir que, à ce stade nous avons créé un pointeur,
nous avons pas réellement mis en la sur tout instant.
Nous avons fait pas référencé il.
La même chose ici quand vous créez une variable,
vous avez créé le nom de la variable, vous avez pas réellement définir une valeur.
Même chose ici.
>> D'ACCORD.
Alors, comment pouvons-nous définir les valeurs des pointeurs?
Il est par référencement et le déréférencement.
Donc, la façon dont nous pouvons référencer un varia-- un pointeur, en substance
nous retournons l'adresse en mémoire dont une variable est stockée.
Donc, si je devais un pointer-- je vais dessiner cette fois nous arrivons à la diapositive suivante,
mais il suffit de savoir que, pour l'essentiel, l'et-- l'esperluette
et que tout le variable-- ne fait que vous donner l'adresse
d'où quelque chose est stocké.
Et déréférencement est le contraire de ce qui est juste l'étoile.
L'étoile vous donne juste la réelle données stockées à cette adresse.
>> Donc, on vous donne l'adresse stocké à une adresse,
l'autre vous donne la réelle valeur stockée à l'adresse.
Donc, les deux d'entre eux donnent vous des choses différentes.
Une fois de plus, les lames sont tous en ligne donc pas de soucis
si vous les gars ne peuvent pas copier cette baisse dans le temps.
>> Donc, nous allons jeter un coup d'oeil cet exemple ici.
Donc, nous avons un géant réseau de mémoire ici, non?
Où nous avons juste des blocs de mémoire, ou octets de mémoire,
dans lequel nous pouvons stocker des choses différentes.
Disons simplement que ce sont les points d'adresse en mémoire.
Donc, chaque fois que vous avez - voir le 0x, tout ce que vous dit est que
Voilà une chiffres hexadécimaux.
Comme vous les gars savent tout, des numéros pourrait être basé dans différentes bases.
La base 10 est généralement la façon dont nous interpréter les chiffres.
Il ya aussi la base 2, qui est binaire.
Et dans ce cas, hexadécimale est base 16.
Il est juste une autre façon de dire 10-- de zéro à neuf ou à zéro
et puis aussi A, B, C, D, E, F. Fait également référence à des numéros différents.
David est allé au cours de cette conférence dans brièvement.
Si vous les gars sont confus, il suffit de Google.
Il ya des façons vraiment facile à apprendre ce qui est un chiffre hexadécimal.
Tout ce qui est vraiment pertinent est dès maintenant pour vous
les gars de savoir qu'un chiffres hexadécimaux en C
dit que généralement vous-- vous dit qu'il est un pointeur.
Ou que ce est une adresse.
>> Donc, dans cet exemple ici, int x est égal à 5.
Nous créons un integer-- Désolé, une variable de type
entier et nous il initialisation à 5.
Donc, ici, sur notre carte mémoire, nous pouvons voir que x est à l'adresse de 0x0
et la valeur que vous avez stocké à l'intérieur de celui-ci est de 5.
Cela devrait donner un sens à tout le monde, non?
D'ACCORD.
>> Et puis ce que nous avons fait dans la deuxième ligne de code
est que nous avons créé un pointeur de type int.
Voilà ce que l'int Star Pointer est en train de faire.
Et qui équivaut à ce que l'esperluette x est de vous donner l'adresse de quelque chose.
Donc, l'adresse de x dans cet exemple est 0x0.
Et pour que l'adresse est en cours stockée dans ce pointeur.
Est-ce que de sens pour tout le monde?
>> Alors, pensez à this-- penser pointers-- ici
à Yale nous avons un système de boîte postale où chaque élève a un mailing
adresse où vous pouvez aller dans le sous-sol de LW
et vous pouvez simplement aller et grab tout ce que vous devez partir de cette adresse.
La même chose se passe ici dans un ordinateur.
Vous avez ces octets de mémoire qui vous pouvez stocker des informations dans,
mais dans le but de savoir qui des éléments d'information
Match Up de ce que vous essayez de trouver et où, vous avez besoin d'un pointeur qui
vous indique comment y aller.
>> Ainsi, par exemple, pour moi, ma boîte postale, Je dois un certain nombre à cinq chiffres.
Voilà mon adresse.
Donc, je peux rendre physiquement à la mémoire, Je peux regarder l'adresse,
Je peux aller à cette boîte postale et accéder aux données à l'intérieur.
Est-ce que de sens pour tout le monde Votre ordinateur est essentiellement
faire exactement la même chose.
>> Donc, tout pointeur fait est que il est juste de créer une mémoire
et ses données de la mémoire est en fait l'adresse de quelque chose d'autre.
Ensuite, vous pouvez aller et de trouver que.
Tout le monde la bonne?
Tout le monde bien avec moi jusqu'à présent?
D'ACCORD.
Frais.
Bien.
Donc, presque la même chose qu'avant.
Il faut donc, d'une part, une variable appelée dans laquelle x case--
Je vais changer cette valeur à 5.
Disons simplement l'adresse de cette mémoire est 0x0.
00.
Génial.
>> Alors, sur notre deuxième ligne de code, nous sommes
va créer un pointeur appelé pointeur ptr.
Et l'adresse de cela, nous allons juste dire que ce 0x01 en mémoire.
Et nous voulons réellement store-- l'esperluette
x vous donne l'adresse de ce que X a été.
Et l'adresse de x était 0x00.
Donc, ce pointeur maintenant a fait l'adresse
stockée comme valeur de ce que X a été.
Tout le monde avec moi jusqu'à présent?
Frais.
>> Ensuite, la manière dont nous aimerions que copier,
est si nous voulons déclarer et initialiser un autre bloc de mémoire de type int.
Droit?
Ce serait un int.
Il serait appelé copie.
Et vous allez donc get-- le pointeur étoiles vous donne
les données réelles provenant de cette adresse.
L'esperluette vous donne l'adresse, l'étoile vous donne les données.
Ainsi, les données de pointeur.
Ce pointeur est orienté à 5.
Et si cette fonction ici-- l'étoile pointer--
va, obtient tout ce qui est en ce bloc et magasins ici.
Tout le monde clair sur comment cela est arrivé?
>> There-- Ainsi, les deux opérateurs droit l'esperluette et le star--
il suffit de faire des choses différentes lorsqu'il est utilisé sur des pointeurs.
Celui que vous obtient l'adresse, l'un vous obtient la valeur réelle.
Donc, assurez-vous que lorsque vous les gars sont codage que vous ne confondez pas les deux
parce qu'ils sont très différents.
Ici, nous avons un bel exemple d'un 0x01.
Voilà une très belle petit numéro à retenir.
Dans votre ordinateur réel vous allez avoir
un certain nombre géant de l'âne qui est quelque chose ce ne est pas belle, pas très agréable.
Il va y avoir une certaine valeur d'ordures.
Et donc ça va vraiment, vraiment gâcher vos programmes.
C'est très important maintenant que nous avons
les fondamentaux bas pour pourquoi-- comme, ce qui se passe physiquement quand
vous utilisez ces blocs de code.
Everyone-- ouais?
>> Auditoire: Alors int x est égal int copie?
>> PENG ANDI: Non, parce que, dans ce cas, int x-- la valeur de x-- est égal à 5, à droite?
Et puis int copie est égal à 5.
Donc, si vous étiez à les assimiler à l'autre parce qu'ils sont des nombres entiers,
oui, ils évalueraient à true.
Mais si elles étaient des chaînes dans la mémoire, comme celui que David a fait durant exemple,
qui est différent parce que ils référencement
les adresses des lieux de la mémoire et ils équivaudraient à false.
>> Donc, ici, il serait vrai parce que vous êtes comparant directement values-- integers--
mais dans les autres vous êtes points de référence.
Parce qu'une chaîne est dans un tableau, et tous-- nous allons parler de ce later--
mais tableau est essentiellement juste un pointeur vers un tas de caractères dans la mémoire.
Donc, ce sont un peu différent.
Mais dans ce cas, oui, vous pourriez le faire.
>> AUDIENCE: Pouvez-vous expliquer l'adresse de la copie?
ANDI PENG: Ouais.
Voilà donc je just-- ne pas remplir une valeur
mais il est juste un peu aléatoire autre valeur des ordures que nous ne nous soucions pas.
Parce qu'une fois que vous démarrez le programme vous vous rendez compte que nous ne le faisons pas fait
vraiment attention à ce que la adresses réelles sont,
nous avons juste besoin de savoir ce qui est à l'adresse.
Ouais.
>> PUBLIC: L'étoile à côté de l'INT deuxième ligne, qui est différente than--
ANDI PENG: Ouais.
AUDIENCE: --la déréférencement et référencement étoiles?
ANDI PENG: Ouais.
Ainsi, les auteurs de celui qui C-- décidé d'écrire la langue de C--
était pas très intelligent.
Ils ne sont pas très intelligent en essayant de comprendre pourquoi nous devrions le faire.
Si elle était moi, je serais certainement utiliser deux caractères différents.
Mais ils ont décidé d'utiliser le même.
>> Donc l'étoile après un int, qui indique à l'ordinateur
que vous êtes sur le point de créer un pointeur.
Mais si vous essayez de déréférencer quelque chose-- en d'autres termes,
aller à l'adresse et tirez les données de somewhere--
l'étoile est utilisé différemment.
Alors vous les gars juste faire attention à propos pas gâcher les deux utilisations.
Frais.
Ouais?
>> AUDIENCE: Donc, juste pour répéter assurez-vous que je suis following--
>> ANDI PENG: Totalement amende.
>> AUDIENCE: --in le côté gauche de cette diapositive, nous faisons une chose que nous savons.
Nous déclarons un nombre entier [Inaudible] qui est égal à 5.
ANDI PENG: Ouais.
AUDIENCE: Droit.
Et puis nous avons une chose int étoiles et qui dit que, OK, un peu comme nous
déclaré un entier, maintenant nous déclarer un pointeur.
ANDI PENG: correctement.
Corriger.
>> AUDIENCE: Droit?
Et notre pointeur est ptr.
>> ANDI PENG: Yep.
Le nom du pointeur est ptr.
Pointer.
Public: Et puis, il est égal à nx qui raconte juste C
qu'il souhaite accéder à la valeur entier x-- la valeur entier x
a été attribué.
>> ANDI PENG: Soyez prudent parce esperluette x effectivement
raconte vous-- l'ordinateur que vous vouloir tirer l'adresse de ce que x est.
Donc vous donne l'esperluette adresse, étoiles vous donne la valeur.
>> Auditoire: Alors, nous voulons l'adresse.
Disons que x était at--
ANDI PENG: Nous avons en fait savoir ce que x est, non?
Parce que nous savons que x était-- je suis invente, mais disons simplement que,
arbitrairement, il était 0x00.
Droit?
Donc, nous savons que l'adresse est 0x00, et donc quand nous allons et esperluette x,
nous savons que ce devrait évaluer à 0x00.
Ce qui explique pourquoi nous avons stocké que que la valeur de notre pointeur.
Cela a-t-il du sens?
>> Public: Oui.
Et la copie va de déréférencer ptr--
ANDI PENG: Droit.
AUDIENCE: --which est un pointeur que nous avons
déclaré que nous la raconte Adresse de l'entier x.
>> ANDI PENG: Ouais.
>> Public: Et dans ce un cas, ptr étoiles est
égale à la valeur de x qui est égal à 5.
>> ANDI PENG: Exact.
>> AUDIENCE: Cool.
Et cela est une façon simple d'obtenir cela ou est-ce la seule way--
ANDI PENG: Donc maintenant il ne semble pas très logique pour nous
de passer tout ce temps à faire cette chose de super compliqué quand
tout ce que nous avons fait est simplement créer deux entiers avec la valeur de 5, non?
Il n'a pas de sens.
Mais une fois que nous allons passer en revue allocation de mémoire et-- nous allons
aller sur pourquoi cela peut être pratique et utile plus tard.
Croyez-moi quand je dis que nous ne faisons pas que créer ces fonctions arbitraires pour vous
les gars à apprendre parce que nous sommes en essayant de jouer avec vous.
Il ya en fait utilise pour tous ces choses et nous allons en parler.
>> AUDIENCE: Awesome.
>> ANDI PENG: Ouais.
>> AUDIENCE: [inaudible].
>> ANDI PENG: Bonne question.
>> AUDIENCE: [inaudible].
>> PENG ANDI: Il est pas.
Il est pas vraiment.
AUDIENCE: les variables --Deux qui a également égale [inaudible].
D'ACCORD.
>> ANDI PENG: Ouais.
D'ACCORD.
Avant de passer, tout le monde est clair?
Je sais Taylor, vous avez un peu en retard.
C'est bon.
Il est en ligne.
Vous regardez le premier 20 minutes et vous serez tout bon.
D'ACCORD.
Frais.
>> Bien.
Donc, cela est essentiellement une sorte de même chose que nous venons de faire.
Il est juste dans une forme graphique.
Si vous deviez suivre ce vient de se passer, int x est égal à 5,
tout ce que nous avons fait à ce point est créer une variable nommée x de type int.
Nous allons stocker le valeur de 5 à l'intérieur de celui-ci.
Il n'y a pas de pointeur parce que nous avons pas effectivement créé un pointeur encore, non?
Et puis dans le prochain ligne, pointeur int étoiles,
Voilà où nous en sommes en fait créer physiquement le pointeur
et nous mettons en place ce que égal ou référencement
le pointeur, à esperluette x.
Qui est où partout dans mémoire ce qui est arrivé à être.
Je ne l'ai pas fait la peine constituant une valeur cette fois.
Mais dans ce cas, ce point vous seriez égale à celle.
>> Et puis, là-bas, la star pointeur est le déréférencement.
Voilà où nous en sommes tirer des informations.
Alors que la valeur en x est en fait va être égal à 35.
Donc, à ce stade, nous avons essentiellement simplement réinitialisé x 35
sans toucher x.
Juste à travers le pointeur qui pointait à x,
nous pouvons réellement changer ce que x était.
Je vais tirer cette ainsi.
>> Donc, ici, nous avons créé une certaine adresse aléatoire ici.
Disons simplement 0x00 nouveau.
Disons simplement que l'adresse est.
Et nous avons créé un entier nommé x et la valeur que je suis affecté à il est 5.
Dans la deuxième ligne, int pointer-- alors maintenant nous avons
obtenu ce deuxième chose ici appelé pointer--
et nous allons to-- disons simplement il est une autre adresse de mémoire vive.
>> Donc, nous allons définir ce égale à quels qu'ils soient.
Et ce pointeur va pointer vers la valeur de x
Et puis, si nous changeons the-- si nous faisons pointeur étoiles,
cela va de la valeur de notre pointeur.
Dans ce cas, il va suivre Cette flèche vers cette valeur de x
et il va changer à 35.
Effectivement, nous avons juste changé x sans toucher x.
Grâce pointeurs juste référencement, nous pouvons aller et changer la valeur de x.
Cela a-t-il du sens?
>> Donc, de cette manière, nous pouvons renommer et a filtres et remaniera en valeurs
à des choses que nous ne effectivement nous faire.
Est-ce que de sens pour tout le monde?
Frais.
D'ACCORD.
Graphique si complexe ici.
Aller ligne par ligne.
Essentiellement, il suffit de faire l'exacte même chose que je viens de faire.
Avant de passer, je vraiment envie de faire juste
que tout le monde est vraiment clair sur ce point.
Donc ici, le code que nous avons est int a est égal à 3, b est égal à 4, c est égal à 5.
Nous avons donc créé trois entiers nommés a, b et c qui sont égal à 3, 4 et 5.
Et puis nous créons trois pointeurs ce point pour chacune de ces variables.
>> Et maintenant, nous allons pour aller sur l'essentiel
ce qui se passe lorsque vous utilisez sur eux.
Donc les en tirer.
Prenez une feuille de paper-- Je ne sais pas savoir si vous les gars ont tout le papier,
mais ceux d'entre vous qui ne le font pas, peut-être emprunter auprès de ceux d'entre vous qui le font.
Prenez des feuilles de papier et aller ligne par ligne.
Et à chaque opération que vous faites, Je veux que vous les gars pour réellement écrire
ce qui est un, b et c à ce point.
Et quelles sont les adresses, ce sont les pointeurs qui pointent vers des a, b et c
à ce point?
>> Et puis, nous espérons que cette seront genre de gars que vous l'étape
à travers la façon de penser des pointeurs.
On ne va pas aller à travers chacun d'eux.
Peut-être que je vais vous donner five-- comme, trois minutes.
Commencez sur la première quelques-uns.
Oh.
Oops.
>> AUDIENCE: Dans la deuxième ligne, pourquoi est pas l'étoile variable [inaudible]?
>> ANDI PENG: Rappelez-vous dans opérateurs, dans la première semaine,
nous avons parlé de la façon dont si vous le faites, plus égaux,
cela signifie juste un égal un plus c.
Dans ce case-- si ceci est un autre façon dont l'étoile peut être utilisé.
En plus des références et déclarant pointeurs,
rappeler qu'il a également des moyens de multiplication.
Donc dans ce cas, ce serait tout simplement avoir une égale a multiplié c.
Qui est tout aussi différente façon d'écrire cela.
>> AUDIENCE: un équivaut à une fois c.
ANDI PENG: Ouais.
>> Public: Qu'est-ce que cela signifie si il dit une lettre d'esperluette?
>> ANDI PENG: des moyens de Ampersand vous allez that-- vous êtes
aller à l'endroit le pointeur est pointant et en tirant l'adresse.
Donc esperluette vous donne l'adresse, étoiles vous donne la valeur réelle il.
>> AUDIENCE: Sommes-nous appuyant sur ligne par ligne?
>> ANDI PENG: Vous êtes la construction de la ligne par ligne.
Il suffit donc de faire une ligne à un moment et vous alors--
ne pas avoir à vous soucier de la finition de la chose entière.
Essayons de passer à travers peut-être deux, trois lignes
et puis nous allons convoquer et finir.
>> Il est totalement OK si vous les gars sont perdus.
Ce concept est vraiment difficile.
Si vous les gars sont inquiets que la classe va comme ceci comme David l'a dit,
il ne le fait pas.
Nous atteignons le pic de difficulté conceptuelle
puis il va être incliné vers le bas.
Alors vous les gars y êtes presque.
Nous avons beaucoup de bonbons pour obtenir vous les gars à travers la bosse.
Je pense à peu près après la chute pause, nous serons sur la butte
et la vie sera bien à nouveau.
Donc pas de soucis à tous.
Bien.
Je vais vous donner les gars 20 plusieurs secondes pour conclure.
D'ACCORD.
Bien.
Jetons un coup de couteau à la présente.
Comme vous les gars me donner des réponses, Je vais juste de les taper.
Et nous espérons nous-- puis-je?
Je ne peux pas réellement saisir.
Je vais le dessiner sur la planche.
>> Donc, ici, dans cette première ligne nous avons un égal b c étoiles.
Aussi Elliot a soulevé un vraiment, vraiment bon point.
Parce que je oublié que, en plus de les deux façons dont nous pouvons utiliser l'emblème de l'étoile,
il ya en fait une troisième voie.
Multiplication.
Et si juste ne pas confondre parce qui est la première façon d'utiliser une étoile.
Il est juste dire l'ordinateur que je suis sur le point de créer un pointeur.
>> La seconde manière en faisant étoile de votre pointeur,
qui raconte le pointeur que vous voulez pour accéder aux données à ce pointeur.
Et puis, bien sûr, il ya juste une simple multiplication
entre deux nombres qui vous dit que je veux multiplier les deux.
Donc, il ya beaucoup de façons nous pouvons utiliser le symbole étoile.
Ne vous trompez pas.
Assurez-vous que vous les gars comprenez exactement ce que tous les trois d'entre eux
font.
>> Ainsi, dans cette première ligne, A est égal à B fois c.
Donc, nous allons passer par ce est un, ce qui est b, c est ce?
Et quel est le pointeur d'un, le pointeur à b, et le pointeur à c?
Quels sont ceux qui tous les égaler?
D'ACCORD.
>> Donc, nous partons avec un égal à 3, b est égal à 4, et c est égal à 5, à droite?
Donc, après cette première ligne, peut quelqu'un me dire ce qu'est un est?
Ouais.
Sentez-vous libre de simplement crier réponses.
20.
Bien.
Quel est b?
>> Public: 4.
ANDI PENG: Quelle est c?
AUDIENCE: 5.
ANDI PENG: Yay.
Bien.
Quels sont PA, PB et PC?
>> Audience: 000001 et 002?
ANDI PENG: Ouais.
Donc une sorte de question piège mais pas vraiment, car ici, je
tira souvenirs réels.
Mais parce que, par exemple, nous ne faisons pas savent réellement ce que ces chiffres sont,
nous pouvons simplement dire esperluette.
Je ne sais même pas si je peut tirer une esperluette.
Il est like-- comment faites-vous cela?
>> AUDIENCE: Comme dessiner un huit.
>> ANDI PENG: Comme un huit.
Comme ça.
D'ACCORD.
AUDIENCE: Bingo.
>> ANDI PENG: tuer.
Donc une esperluette, vous pouvez simplement le faire.
Parce que nous ne le faisons pas fait attention à ce que la valeur de cette
est, et il est un peu longue valeur de cul de toute façon,
nous utilisons simplement giong à-dire une esperluette.
Alors quel est pb?
AUDIENCE: [inaudible].
ANDI PENG: Ouais.
Frais.
Bien.
Facile première ligne.
Nous avons obtenu cela.
Pointeurs sont faciles.
C'est bon.
>> Deuxième ligne.
Et donc égale étoiles est le même chose que de dire une fois c est égal à un.
Il est juste un moyen plus facile de l'écriture.
Donc, nous ne cherchons pas à faire un point ou rien ici.
Donc fait avec la première ligne.
Qu'est-ce qu'un sur la deuxième ligne après avoir fait une égale a multiplié par c?
>> Audience: 100?
PENG ANDI: Il est 100.
Bien.
Que diriez-vous b?
>> AUDIENCE: [inaudible].
>> ANDI PENG: Que diriez-c?
>> AUDIENCE: [inaudible].
>> ANDI PENG: Et que diriez-vous des pointeurs?
They-- sont la même chose, non?
D'ACCORD.
Maintenant troisième ligne.
Peu plus délicat.
b égale étoiles pa.
Quelqu'un peut me dire, d'abord, ce qui fait pa étoiles égale?
>> PUBLIC: Il est la valeur qui est stocké à une.
ANDI PENG: Exactement.
Et quelle est la valeur qui est stocké à une?
>> Audience: 100.
>> ANDI PENG: OK.
Donc, ce qui serait un être après l'exécution de cette ligne de code?
>> AUDIENCE: [inaudible].
>> ANDI PENG: Qu'en est-il b?
>> Audience: 100.
>> ANDI PENG: Ouais.
Et puis tout le reste est à peu près inchangée, à droite?
Parce que nous ne touchons pas.
Frais.
Quatrième ligne.
Un peu plus complexe.
Donc pc-- encore une fois, pc est le pointeur qui pointait vers C-- égale pa.
Qu'est-ce qu'un?
>> Audience: 100.
ANDI PENG: Quel est b?
Audience: 100.
ANDI PENG: Qu'est-ce que c?
AUDIENCE: 5.
ANDI PENG: Quelle est pa?
AUDIENCE: Ampersand a.
ANDI PENG: pb?
AUDIENCE: b Ampersand.
ANDI PENG: Et difficile, ce qui est pc maintenant?
AUDIENCE: Ampersand a.
ANDI PENG: Yay.
Woo hoo.
Les gars, vous voyez?
Ceci est tout droit.
Il est pas trop mal.
Nous avons plus de bonbons si elle est pas tout à droite, mais je pense qu'il est tout droit.
Et nous allons aller sur un seul plus avant de reprendre les plus durs.
Les réponses que je ai ici.
>> Essentiellement, sachez que cela est tout comme les mathématiques à ce point.
Lorsque vous avez des équations simples comme un plus b, une fois c, qui est facile à faire.
Et quand vous commencez expansion sur il suffit de passer commande des opérations.
Même chose que précédemment.
>> Gardez une trace de si votre étoiles est avant quelque chose.
Cela vous dit la valeur.
Si vous avez un et avant quelque chose, il vous indique l'adresse.
Et vous devez attribuer soit pointeurs ou cette valeur.
Allons donc au cours de cette dernière réel rapide.
Non ce dernier, désolé.
En fait, les gars vous pouvez choisir.
Quel est celui que vous les gars voulez aller sur le restant de trois
Que nous avons?
Je ne pense pas que nous puissions le faire parce que nous ne pouvons pas simplement aller à la ligne.
D'ACCORD.
Les gars, vous ne disposez pas d'un choix, il est seulement le troisième durer un.
>> Étoile pc égale b fois c.
>> AUDIENCE: Star pb?
>> AUDIENCE: Star pb.
ANDI PENG: Désolé?
AUDIENCE: Star pb.
ANDI PENG: Star pb.
Oh, mon mauvais.
Étoile pb égale b fois c.
Je vais vous donner les gars de 10 secondes.
Il suffit de penser rapidement.
Ce que nous avons est donc Jusqu'à présent, ce qui se passe après que nous
exécuter cette cinquième ligne juste là?
D'ACCORD.
Qu'est-ce qu'un?
>> Audience: 100.
>> ANDI Peng: 100.
Quel est b maintenant?
>> Audience: 500.
>> ANDI PENG: Bon.
Quelqu'un veut-il expliquer moi pourquoi c'est 500?
Je ne me sens pas comme nous en fait jamais touché b.
Comment avons-nous réussi à changer le valeur de b sans toucher b?
Ouais?
>> AUDIENCE: Parce pb étoiles signifie la valeur à pb--
ANDI PENG: Exactement.
AUDIENCE: --which est b.
ANDI PENG: Exactement.
Donc, ici, dans notre schéma, notre pointeur pb est effectivement dirigée à ce droit
ici, ce qui est le b physique réelle.
Et si vous alliez et vous faites pb étoiles, qui est
la suite de votre flèche de votre pointeur et changer physiquement la valeur de b.
Voilà pourquoi nous avons changé à B 500 sans toucher b.
Et puis tout le reste demeure même parce que nous ne touchons que.
Voilà b.
Frais.
Et alors--
>> AUDIENCE: Je dois juste une question.
>> ANDI PENG: Ouais?
>> Public: Depuis we've-- il n'y a plus c esperluette,
ce que cela signifie une esperluette rediriger la même chose maintenant?
>> ANDI PENG: Yep.
Ainsi--
Auditoire: Alors, la flèche sorte de déplace simplement et--
ANDI PENG: Donc essentially--
AUDIENCE: --now nous ne pouvons pas access--
ANDI PENG: --Quand nous déréférencer c on-- je faussaire.
Ca c'était quoi?
La troisième ligne?
Quatrième.
Quatrième ligne.
Tout ce que nous avons fait était, essentiellement, changer cette flèche
et l'ont dirigé vers une place.
>> Auditoire: Alors, nous ne pouvons plus accéder c.
>> ANDI PENG: Si vous aviez cette exacte nombre, on pouvait y accéder.
Mais non.
Nous ne disposons pas un pointeur pointant vers c plus.
Je pense que si vous vouliez d'accéder de nouveau, vous
créerait une autre pointeur qui re-a à c
ou déréférencé et a fait ce retour.
Donc, non, comme de maintenant, les trois pointeurs, aucun d'entre eux soulignent c.
>> Tout le monde la bonne?
Les réponses sont en ligne.
Sentez-vous libre pour, après l'article, aller sur les deux derniers tests et vous-mêmes.
Mêmes concepts, juste un peu plus embêtant.
Il suffit de suivre à travers la logique de pourquoi les choses sont des choses différentes.
Et l'indice, les pointeurs sont un sujet que nous aimons
pour couvrir le quiz parce qu'ils sont conceptuellement très difficile.
Donc, je dirais que vous examinent tous les gars ce tableau
ou réduire à des concepts similaires cela avant votre test la semaine prochaine.
>> AUDIENCE: Excusez-moi.
>> ANDI PENG: Ouais?
AUDIENCE: [inaudible] finale One-- [inaudible].
>> ANDI PENG: 50.000?
Je besoin de le suivre vers le bas.
Mais somewhere-- Je pense que la ligne avant, vous avez créé valeur de c géant.
c est égal à cette chose géant qui est 100 fois 500.
Non.
>> AUDIENCE: [inaudible].
>> ANDI PENG: Oui.
100 fois 100 qui est 10 000.
Qui est 10.000.
Donc, retour là-bas vous êtes multipliant b et c.
Donc, le pointeur qui pointe vers b-- qui est la valeur de temps 500-- a--
>> AUDIENCE: [inaudible].
ANDI PENG: Peut-être qui est faux.
AUDIENCE: Non, non, il est pas. [Inaudible] pointeur au c est maintenant pointée vers a--
ANDI PENG: Ouais.
Il a raison.
>> AUDIENCE: --il est à sa au equals un times-- il est la valeur de c.
ANDI PENG: Pouvez-vous dire que un peu peu plus fort que tout le monde peut vous entendre?
Auditoire: Alors pointeur au c pointent maintenant à ce que le pointeur d'un utilisé pour pointer
to-- et does-- toujours, mais ils soulignent la même chose qui est l'un, non?
La valeur a toutefois il a été nouvellement définies.
Et au début de ce que vous êtes dire un était déjà 100 fois
la valeur à b qui est 500.
Et donc ce est cependant beaucoup qui est.
50000.
Ils vous réassignez cela à ce que la espace mémoire au c est-- le pointeur à c
est montrant qui est un.
Donc, vous redéfinissez un être 50.000.
ANDI PENG: Elle ne pouvait enseigner section pour moi.
La prochaine fois, il est tout à toi.
Ici.
Voici plus de bonbons pour cela.
Vous méritez des bonbons pour cela.
>> AUDIENCE: Je suis presque surpris que.
>> ANDI PENG: Vous avez presque attrapé ça.
C'est d'accord.
Ouais.
Mais elle était tout à fait exact.
Donc ce que vous avez à faire est that-- je pense que nous
avoir à suivre le fait que les pointeurs sont désormais
pointant vers des valeurs différentes.
Ainsi, le value-- désolés, la pointeur de c rejointoyée à un.
Et pour que déplacé tous nos numéros.
Et voilà pourquoi, lorsque vous accédez à la valeur qui y sont stockées, il est différent.
Cela a-t-il du sens?
D'ACCORD.
Frais.
Tout le monde bon, avant de passer?
>> AUDIENCE: the-- fait quand vous allez vers le bas les lignes de la colonne de gauche,
ne la première rangée affecte la deuxième rangée puis l'second-- comme, il est tous--
ANDI PENG: Ouais.
Alors, imaginez son code où je simplement saisi dans une égale b fois c, une étoile est égale à c.
Imaginez que je l'ai simplement manqué ce code
et je ne l'ai pas imprimer ce toutes ces choses étaient.
Si je devais juste pour imprimer la première chose en haut, il serait ici.
Si après avoir couru tous ces lignes de code,
ce que ces valeurs doivent être à la fin sont que.
>> Donc, je l'ai effectivement écrit un programme ici.
Je ne l'ai pas fait tout la multiplication.
Mais imaginez.
Donc ici, je viens d'un programme appelé pointeurs.
Je vais agrandir si vous guys-- OK.
Donc, je l'ai créé variables a, b et c.
Je me suis fixé les égal à 3, 4, et 5, et je l'ai
créé leurs pointeurs correspondants.
Et puis ici, je vais juste d'imprimer ce qui est.
Alors permettez-moi de courir que.
>> Avez-vous les gars de la merde.
Voyez-vous comment un gars, b et c sont ces valeurs
mais leurs pointeurs sont ce géant valeur des ordures que nous ne nous soucions pas?
Donc, si je devais effectivement brancher dans toute la multiplication
puis réimprimer tous cela, il serait à exécuter
pour ce qui est à la base.
Donc, si vous les gars veulent jouer avec codage effectivement physiquement,
vous les gars pouvez suffit de brancher tous ceux.
Le code sera en ligne, puis votre valeurs doivent imprimer à cette suite.
>> Et puis vous verrez comment le pointeur adresses ont effectivement réaffectés.
Donc, vous verrez comment la adresse du c devient réalité
à égale quel que soit l'adresse d'un été.
Et ils correspondent à ce que qui est grand nombre.
Bonne question.
Tout le monde va bien?
Un dernier appel pour les questions.
D'ACCORD.
Bien.
Alors préparez-vous à avoir votre esprit soufflé un peu peu plus.
Les tableaux sont en fait que des pointeurs.
Voilà tout ce qu'ils sont.
Et rappelez-vous, ce sont des chaînes?
Ils sont aussi des tableaux.
Donc ce sont des chaînes vraiment?
Ils sont comme des pointeurs vers la début d'un caractère de plus de caractères.
>> Donc, il est juste concepts qui commencent à construire les uns sur les autres.
Voilà donc pourquoi-- vous rappelez-vous en conférence, David,
quand il a eu cette comparaison int chaîne maman
est quelque chose et puis une autre chaîne maman et vous
essayer d'assimiler les deux à l'autre, ils vous donnent des valeurs différentes.
Il est parce que les chaînes eux-mêmes ne sont pas des valeurs.
Tout ce qu'ils sont sont des adresses de mémoire char-- Ce sont des tableaux de caractères et les tableaux
sont des pointeurs juste.
>> Donc, en substance, lorsque David était comparing--
est-ce OK si je efface tout cela?
Donc, en conférence lorsque David mère avait équivaut égaux maman,
pour nous cela semble être la même chose.
Droit?
Mais, dans l'ordinateur sous la hotte, ce qui se passe
est que cette chaîne, tout ce qui est est un tableau.
Avec un ampersand-- ou, désolé, avec une terminaison nulle à la fin.
Droit?
Backslash 0.
Mauvais barre oblique inverse.
>> Donc, tout ce qu'ils were-- tous ces deux chaînes were--
sont gamme de fours de taille avec les lettres de maman et maman.
Mais ce sont vraiment des tableaux sont juste pointeurs vers un endroit spécifique de la mémoire
qui raconte vous de commencer votre tableau.
Donc dans ce cas, tout cela était était juste une certaine valeur d'ordures,
certains pointeur aléatoire.
Et tout cela était été une autre valeur des ordures.
Disons simplement 0x200.
>> Et donc quand vous essayez de l'égalité les deux à l'autre,
ils évaluent à false parce la addresses-- les pointeurs
were-- qu'ils étaient différents.
Considérant qu'il est différent si vous êtes essayer de comparer entiers réels.
Comme si vous vouliez compare-- dans la dernière example-- int A à B,
ils évalueraient à vrai comme l'a dit Elliot
parce qu'ils étaient des entiers qui ont été stockées
et vous évaluez seulement les valeurs.
Voici, parce que les chaînes sont des tableaux et tous les tableaux sont des pointeurs,
Voilà pourquoi ils ne sont pas égal à l'autre.
>> Alors sorte de confusion, ce graphique.
Mais disons simplement imaginer.
Nous avons créer un tableau de taille 3 avec indice de 0 à 2-- 0,
1, 2 avec les valeurs de 1, 2, 3 et stockées en eux.
Toute la gamme vraiment does-- ici, disons juste
dis je crée un pointeur à ce tableau qui est
accéder à la valeur de la premier indice de ce tableau.
Alors, voici ce serait 0.
Droit?
Tout le monde comprend comment cette première ligne évalué?
Génial.
>> Et donc si vous vouliez pour initialiser les valeurs supplémentaires après que,
tout ce que nous faisons est la réaffectation.
Donc, 0, 1, 2, 1.
Donc, ce pointeur qui était autrefois pointant vers ici, tout ce que nous faisons
se déplace vers le bas.
Voilà ce que le plus 1 fait.
Et puis nous pouvons mettre 2 il.
Si nous voulions mettre 3 dans l'un après, nous effacer ce pointeur,
mettre 3 là.
Est-ce logique tout le monde?
Ouais.
Avez-vous avez une question?
PUBLIC: Il est [inaudible] ont une question, je vais le dire quand même.
Je ne pense pas qu'il est en fait un Mais-- question en anglais, array
est égal à 1 fait sens.
Nous sommes comme, OK, la première chose.
Mais les choses sont 0 index [Inaudible] le tableau est égale à 0
pour indiquer la première place.
ANDI PENG: Ouais.
Donc en fait ce que je fais ici est Je ne suis pas accéder au premier indice.
Tout ce que je doing-- Alors tout d'abord, me dire ce que ce que le tableau d'étoiles faire?
Qu'est-ce qu'une étoile avant un pointeur faire?
>> PUBLIC: Il indique un pointeur.
Que vous êtes déclarer un pointeur.
Il DE--
>> PENG ANDI: Il déréférence quels moyens il va et effectivement obtient la valeur.
Droit?
Donc dans ce cas, vous souhaitez obtenir la valeur ici et définir ce à 1.
Ouais?
Donc, je ne suis pas actually-- Je ne sais pas soucient vraiment de l'indice de cela,
tout ce que je fais est juste itération bas en déplaçant mon pointeur vers le bas du tableau.
Et puis finalement, je avoir à l'arrêter, non?
Et la façon dont je me arrête est quand je frappe, dans le cas
d'une chaîne, un terminateur null.
Je sais, oh, si je frappe un back-- si je vois 0 barre oblique inverse, je sais que je suis fait avec ce
et je sais que je peux juste arrêter itérer.
Très bonne question.
>> Et nous allons vraiment aller plus loin en profondeur dans la semaine prochaine
parce que la pièce qui va impliquer beaucoup de l'utilisation de pointeurs.
Mais il suffit de savoir qu'en ce moment, qui est juste une plus-- différente
qui est juste une façon différente pour l'ordinateur pour écrire, essentiellement,
ce que nous avons fait.
Comme David dit dans des conférences, la façon dont nous
accéder à un tableau est juste en faisant tableau 0, 0 support, si nous venons
voulu pour accéder à la première valeur.
>> Tout l'ordinateur est en train de faire est tournant en ce que lui-même et l'itération.
Donc, nous l'appelons syntaxique de sucre qui est juste
une façon élégante de dire convivial les moyens de nous en sachant comment programmer.
Mais l'ordinateur dessous, ce qu'il fait,
il est en fait juste avoir un pointeur qui est réglage.
Mais la façon dont nous l'écrivons, parce qu'il est plus facile pour nous
penser à des choses en termes de boîtes et comment descendre boîtes,
est en ayant les parenthèses.
Désolé, qui était vraiment, vraiment mal Mais-- ouais.
AUDIENCE: Alors, comment serait vous comparez deux chaînes
pour voir si ils sont égaux entre eux?
>> ANDI PENG: David a écrit ce programme en conférence
donc je vais juste aller plus rapidement et brièvement.
La façon dont vous souhaitez le faire est ce que vous le feriez effectivement
besoin d'aller et de comparer la addresses-- ou les valeurs
obtenue à partir des pointeurs.
Alors rappelez-vous, comment vous faire obtenir la valeur ici?
Je ne me soucie pas de l'adresse ici.
Comment puis-je réellement obtenir la valeur de tout ce qui est ici?
>> AUDIENCE: [inaudible].
>> ANDI PENG: Exactement.
Donc, vous comparez l'étoile ici contre la star ici.
Sont ceux égale.
Et puis vous descendez.
Êtes la star ici et la star ici égal?
D'ACCORD.
Ils sont égaux.
Et vous continuez à descendre jusqu'à ce que vous avez touché la fin des deux.
Et si tous sont égaux, alors vous savez que votre chaîne est égale.
Et C a effectivement un fonction écrite appelé
Chaîne Comp qui en fait juste est-ce que pour vous afin que vous ne '
avoir à l'écrire vous-même.
Ouais?
>> AUDIENCE: Je pense que dans la leçon est quand on ne le compare.
Nous ne vraiment besoin d'un compteur comme pi, non?
>> ANDI PENG: Vous ne faites pas parce que nous ne nous soucions pas vraiment
combien de boîtes que nous avons réitéré à travers.
Tous nous nous soucions est que nous allons continuer jusqu'à ce que je sais pour arrêter.
Et vous savez d'arrêter quand il ya une sorte d'indication
que vous êtes à un terminateur null.
Ouais.
Ainsi--
AUDIENCE: [inaudible].
ANDI PENG: Ouais.
Ainsi, dans le cas de comparaison cordes, je ne pas vraiment
soins comment de nombreuses lettres soient: je dois comparer
si elles sont vraies ou fausses, si elles sont égales entre elles.
Je ne me soucie pas combien de lettres sont dans chacun d'eux, non?
Je me soucie simplement que cette correspond avec ce et celui
après les matches et l'un après correspond à tout le chemin jusqu'à la fin.
Droit?
Cela a-t-il du sens?
>> Donc, je ne me soucie pas vraiment combien de lettres, Je me soucie seulement que toutes les lettres
rencontre.
Ouais.
D'ACCORD.
Puis-je passer de tout cela?
Génial.
Nous sommes un peu court sur temps, je vais vous permettre simplement
les gars à regarder brièvement à cela.
Lancez-le dans votre ID si vous les gars êtes curieux.
Et vous les gars peuvent voir ce que ce sera imprimer.
D'ACCORD.
>> Donc, quelque chose que nous allons également toucher sur un bit est l'idée de l'arithmétique de pointeur.
Qui, tout ce qu'il est, est plutôt que de réglage
les valeurs de ce qui est stocké à l'adresse de votre pointeur,
il est juste fait changer l'adresse elle-même.
Donc, si vous vouliez que l'humain d'ajuster votre pointeur manuellement,
la façon dont vous feriez qui est juste faire n fois la taille du pointeur.
Droit?
>> Donc, un int.
Un int-- combien d'octets dans la mémoire est un int?
Il est quatre, non?
Donc, si je sais que je dois un tableau de tous ints et je veux qu'il pointe vers une
après, je sais que je dois juste déplacer mon pointeur vers le bas de quatre octets, non?
Et ainsi n fois la taille des octets de pointeur
est cependant le nombre d'octets que vous êtes juste va déplacer votre pointeur vers le bas par.
>> Ainsi, par exemple, si on a un tableau de ints, le premier, disons simplement,
est mémorisée en tant que 0x00.
Vous savez le prochain va être au 0x04 parce qui est quatre octets plus tard.
Et celle d'après ça va être 0x08 et ainsi de suite et ainsi de suite.
Et donc, les gars, jetez un oeil.
>> Tout ce que vous faites ici est que vous avez un pointeur y
et vous ajoutez cela à votre mémoire de sorte que vous pouvez déplacer vers le bas
les blocs de mémoire allouée.
Une sorte de concept de niveau supérieur.
Les gars, vous aurez pas besoin savoir pour cette semaine,
mais qui est tout ce qu'il a fait là-bas.
D'ACCORD.
>> Un autre temps de plaisanterie.
Deux chaînes de marche dans un bar.
On dit, je voudrais un rhum et les valeurs d'ordures à coke.
L'autre dit, vous aurez à excuser mon ami, il ne null résilié.
Les gars, vous l'obtenez.
Pardon.
Voilà comment je me tiens aller quand je PrEP pour la section
est que je insérer un couple de diapositives de plaisanterie.
Quoi qu'il en soit.
D'ACCORD.
Avant de passer on-- donc, essentiellement, nous avons
couvert toutes les conceptuelle les questions liées à des pointeurs.
Et puis nous allons talk-- mobile De plus, pourquoi parler de ce qui est important
et comment qui correspond dans le idée de gestion de la mémoire.
Mais avant que je passe, Quelqu'un at-il des questions
à propos de l'utilisation du pointeur, ce qui se passe lorsque vous créez des pointeurs,
comment sont chacun le référencement d'autre part, comment sont-ils déréférencement?
Une question sur avant que je passe sur?
D'ACCORD.
Génial.
>> Cela nous amène dans cette plus grande notion de niveau supérieur
de gestion de la mémoire dans son ensemble.
Donc, essentiellement, dans votre ordinateur, il est
deux types de base de mémoire ou régions dans lesquelles la mémoire sont stockées.
Vous avez ici ce qu'on appelle le tas et vous avez ici
ce qu'on appelle la pile.
Et nous allons parler la pile d'abord parce qu'il est
l'une plus que vous finagley avoir au type de conceptuellement
comprendre ce qui se passe.
>> Donc tout ce que la pile est-- penser comme une pile de mémoire physique
où vous avez un bloc de mémoire qui est mis de côté pour votre programme
pendant son exécution.
Et cela est le cas, essentiellement, tous les de vos variables locales sont stockées.
Donc, ceci est juste un zoom dans l'image de cette pile.
La pile, là-bas, je suis juste un zoom un peu plus.
>> Donc, essentiellement, dans une pile vous avez un tas de fonction dans votre programme.
Donc, nous allons simplement revenir deux semaines à l'exemple
où nous avions notre fonction principale ainsi que d'une fonction de cube
où nous avons essayé de créer une fonction qui cubed-- qui a eu paramètres en entrée,
cubes eux et retourné les ramener à principal.
Ainsi, la manière que cela est stocké dans la mémoire est ce que vous avez votre fonction principale
ici en bas.
Et puis avec chaque fonction supplémentaire, que vous appelez et ajoutez en plus de cela,
la mémoire empile juste au-dessus.
Pensez-y comme une pile physique.
>> Et si vous avez de vous tous principale variables de vos principales fonctions,
tout ce qui se passe ici, stocké.
Et puis quand vous avez appelé cube, il va et il
crée des copies de tous ceux paramètres et il les stocke
ci-dessus dans un endroit différent.
Et alors pourquoi nous intéressons-nous?
La raison nous nous soucions est que nous ne pouvons pas simplement Utilisez les paramètres ici-- les variables
ici-- et nous les changer, nous prévoyons leur également être modifiés ici, non?
>> L'idée est qu'ils sont sauvés à différents endroits dans la mémoire
de sorte que, lorsque vous accédez à différents fonctions, ce que vous pensez qu'il se passe
est pas passe réellement parce que le bits de mémoire ne sont pas interconnectés.
Et donc la question qui est vraiment important pour nous de sorte de comprendre
est, si, lorsque nous manquons un programme, la taille d'une fonction
empiler frame-- si physiquement, comment quantité de mémoire faut-il lui donner?
Peut-être qu'il est une fonction géant afin que nous avoir pour lui donner autant de mémoire.
Mais si elle était plus petite que nous avions besoin d'un petit peu.
>> Donc, l'idée est que, lorsque nous manquons un programme de la taille de cette fonction
dépend de combien variables et le type de variables
que nous voulons lui donner.
Mais que faire si le nombre de variables-- et leurs tailles,
qui est déterminé pas par vous, mais le codeur
est déterminée par le réelle utilisateur de votre programme.
Donc, si je voulais créer une fonction qui a eu cordes de l'utilisateur,
mais je ne sais pas vraiment comment grande ces chaînes sont, il est difficile pour moi
d'attribuer spécifique quantité de mémoire nécessaire.
Droit?
>> Parce que si ce function-- si cet utilisateur saisit une chaîne géante,
il va créer une erreur de ce qu'on appelle essentiellement
Stack Overflow où vous allez au-delà du limites de la mémoire que vous avez.
Et alors que faisons-nous?
Si nous ne pouvons pas simplement créer ce géant pile qui peut tout sauver,
que faisons-nous pour résoudre ce problème?
>> Donc, nous allons passer à autre chose et de parler sur ce deuxième type de mémoire
et ensuite nous pourrons parler de la façon nous pouvons utiliser les deux ensemble
pour résoudre cette question.
Alors maintenant, nous allons monter dans une autre partie de la mémoire
dans notre ordinateur.
On appelle cela le tas.
Donc, tout le tas est une piscine de mémoire disponible que
peut être allouée dynamiquement.
Donc, cela peut changer tout votre programme est en marche.
>> Et donc une région de mémoire inutilisée qui peut
être allowed-- qui peut être alloué à la fonction
appelé malloc, ou l'allocation de mémoire.
Donc, essentiellement, lorsque vous exécutez un programme,
vous pouvez créer dynamiquement la mémoire de le tas et à utiliser que tout ici-bas.
Et alors, l'ensemble de vos fonctions ici peut accéder le tas.
>> Et ainsi de malloc, cette idée que David sorte de rapidement, brièvement passé sous silence
en lecture, est juste un moyen pour vous permet de contrôler votre mémoire.
Comme, quand vous êtes juste la création empiler fonctions, lorsque vous êtes
avoir votre fonction principale avec vos fonctions aléatoires,
vous pensez d'eux comme des enfants qui vient se sont enfuis quand vous aviez fini avec eux.
Ils étaient vraiment mauvais enfants.
Vous les avez, vous créez leur enseigner quelque chose,
et puis quand vous voulez accéder à nouveau qu'ils sont
pas là parce que votre mémoire juste couru loin.
>> Mais malloc, ou le tas, est un moyen d'avoir de meilleurs enfants, où
vous pouvez créer des types de eux, leur assignent des valeurs,
utiliser eux-- qui sonnait vraiment bad-- les utiliser mais que vous vouliez,
mais alors en mesure de contrôler eux et puis libérer de la mémoire
chaque fois que vous en avez besoin.
Alors, lorsque vous avez terminé avec votre fonction, les enfants reviennent de vous
et vous avez encore que les données là.
>> Ainsi, la manière que nous malloc, ou de créer, la mémoire est par l'étoile fonction void
taille de malloc en octets.
Voilà donc tout le prototype la raison pour laquelle nous faisons cela.
Donc, un exemple est que nous créons un pointeur de taper int-- les égaux de int étoiles
taille de malloc de int.
Donc la raison pour laquelle nous faisons taille des et pas seulement un number--
parce que nous savons tous que un int est de quatre octets,
droite- mais un int est seulement quatre octets sur certains systèmes d'exploitation.
>> L'idée pour nous programmeurs est que nous
vouloir créer un code qui peut fonctionner sur tous les ordinateurs, pas seulement
nos ordinateurs simples.
Et voilà pourquoi nous aimons utiliser taille de et pas seulement le nombre de quatre.
Cela fait-il sens pour tout le monde?
Donc la taille de-- tout, il est un C que la fonction ou de l'exploitant
vous indique combien d'octets de mémoire fait un certain type de variable prendre place.
Donc dans ce cas, la taille d'un int est de quatre.
Quatre octets.
Et malloc va libérer jusqu'à quatre octets dans votre tas,
alors vous pouvez ensuite utiliser dans votre principale fonction d'être capable de stocker la mémoire.
Tout le monde est clair sur ce point à ce jour?
Ouais?
>> AUDIENCE: Je suis clair, mais juste pour être sur clear--
ANDI PENG: OK.
Tout à fait bien.
AUDIENCE: --size d'est [inaudible] peut effectivement [inaudible]
et il va vraiment faire la chose que nous voulons.
Il est pas un pseudo.
>> PENG ANDI: Non
>> PUBLIC: Il est comme un véritable chose--
>> ANDI Peng: Ceci est du code réel.
>> AUDIENCE: -Nous peut l'utiliser.
Il est courant.
Frais.
ANDI PENG: Taille de vient avec C.
AUDIENCE: qui rend ma vie plus heureuse.
ANDI PENG: Ouais.
Donc, si vous êtes un programmeur paresseux comme je suis genre de parfois,
Je ne l'aime pas mémoriser ce que la taille d'un int
est, je ne l'aime pas mémoriser avec la taille d'un flotteur est.
Taille de simplement vous dit ce il est et qui est beaucoup plus facile.
>> Bien.
Donc, une chose importante que vous les gars veulent tous
garder à l'esprit lorsque vous êtes avec malloc est que vous avez toujours
avoir à vérifier pour voir si elle est nulle.
Donc, comme je l'ai dit, de retour à cette image de l'amas.
Le tas est juste ce géant pile de la mémoire que vous avez.
Et vous voulez être en mesure de prendre des morceaux de la mémoire de celui-ci et l'utiliser, non?
>> Mais que faire si vous avez pas plus de mémoire dans ce tas?
Que faire si je l'ai déjà utilisé tout de celui-ci et je cherche à malloc plus?
Cela ne existe pas.
Eh bien, voilà pourquoi vous êtes allez obtenir une erreur.
Vous allez SEG faute. Vous allez d'avoir une erreur de segmentation où vous
essayez d'accéder à des choses qui ne sont pas là.
Et la façon dont nous faisons et que la façon dont nous
éviter est que nous vérifions pour voir si nulle du pointeur.
>> Donc, si je devais quelque chose de malloc et je devais pas plus de mémoire,
ce serait une erreur imprimer parce que le pointeur retourné est juste nulle.
Et la façon dont nous faisons this-- cette conception est tout simplement génial,
simplement mémoriser this-- est que toute fois que vous essayez quoi que ce soit à malloc,
vous allez avoir besoin de vérifier pour voir si elle est nulle.
Parce que chaque fois que vous essayez de obtenir la mémoire du tas,
vous avez toujours à faire vous que vous avez la mémoire.
Voilà tout ce qu'il est.
>> Donc à peu près ces trois de lignes de code, mémoriser.
Chaque fois que vous malloc, plop eux.
Vous allez avoir besoin d'eux.
Parce que je vous le garantis, nous allons pour vous tester sur une affaire et votre ordinateur
va exploser parce que vous êtes va essayer de l'accès mémoire qui est
pas là et les choses vont accident et il ne va pas être bon.
Il suffit donc de percer que dans votre cerveau.
Malloc, null.
Bien.
>> Alors ce engendre le question de ce qui se passe
après que nous avons terminé en utilisant cette mémoire.
Parce que l'idée d'avoir été malloc
que nous avons ce tas que nous pouvons prendre mémoire à partir, puis nous pouvons l'utiliser.
Droit?
Et puis ce que nous devons nous rappeler est que, après que nous aurons fini avec elle,
nous pouvons alors libérer.
Laisser aller.
Nous pouvons le laisser aller.
Ou bien vous allez aussi à fuir mémoire et plus de mauvaises choses vont se passer.
>> Essentiellement, chaque fois que vous êtes la mémoire de toucher,
mauvaises choses qui se passera si vous ne pas faire les choses correctement.
Vous devez donc vérifier, d'abord, si vous avez la mémoire disponible.
Et puis après vous avez terminé, vous voulez libérer et permettre à votre système d'exploitation
de le reprendre.
Donc, la façon dont nous faisons est juste que fonction, sans vide, et le pointeur
à ce tas de mémoire.
>> Ainsi, l'exemple est pointeur libre.
Il est assez facile, simple, ne veulent pas de l'oublier.
Afin de vérifier pour voir si elle est nulle, gratuitement.
Tout le monde la bonne?
Donc encore une fois, le code que vous les gars peut prendre sorte de rapidement un coup d'œil sur.
Je sais qu'il ya beaucoup de nouvelle syntaxe et tout va bien, si vous êtes comme, ah,
ça veut dire quoi encore?
Pas de soucis.
Tout cela était censé être est l'affichage une action, comment toutes ces choses
peuvent être utilisés ensemble.
Donc, ce qui est mis ensemble comme une bande du passé
diapositives nous sommes allés grâce en un seul programme.
Public: D'une certaine façon que l'on peut actually--
ANDI PENG: D'une manière qui nous pouvons réellement utiliser.
Vous pouvez plop que dans votre ID, vous pouvez l'exécuter et il pourrait fonctionner.
AUDIENCE: OK.
Voilà donc réel?
>> ANDI Peng: Cela est vrai.
Ouais.
Je tente de faire de sorte que le les polices sont différentes de sorte
que chaque fois que je tape réel le code de la police est le code de la police
et que mon code de note est différente, mais Je ne sais pas si cela fonctionne réellement.
AUDIENCE: Non
Je pense que--
>> ANDI PENG: OK.
>> AUDIENCE: --sometimes [Inaudible] et je suis
comme, ce serait vraiment mignon si elle était en fait une chose utile
mais alors il est pas une chose utilisable.
Je veux que ce soit une chose utilisable.
>> ANDI PENG: OK.
Ouais.
Je vais passer ce long.
Soyez comme, David, les enfants sont vraiment triste quand vous écrivez faux code.
Bien.
Ouais?
>> Auditoire: Alors les ptr ici est pas réellement un pointeur,
il est un bloc de mémoire?
>> ANDI PENG: Alors parlez-vous la première ligne ou de l'un vers le bas ici?
Parlez-vous celui-là?
>> AUDIENCE: Le PTR est des choses différentes in--
>> ANDI PENG: Eh bien, ici ce que je doing-- effectivement,
disons simplement passer par ici.
Ce genre de liens dans bien tous les concepts.
Nous avons donc ici ptr int étoiles.
Donc int pointeur, qui est là nous sommes en train création
un pointeur qui pointe vers un entier.
Eh bien, il va pointer vers un entier.
Et nous allons à malloc, ou donner, assez de mémoire allouée
pour stocker un nombre entier.
Donc quatre octets dans ce cas.
>> Et puis, si cela est égal à égal null-- Equals null-- nous allons imprimer.
Oh, vous avez une erreur car vous êtes hors de la mémoire, non?
Sinon celui du scrutin, qui raconte simplement votre programme
que vous avez une erreur.
Et puis, si vous le faites avoir cette mémoire, il est
va stocker tout ce qui se int vous donne dans l'emplacement
et le définir comme la valeur du pointeur.
Donc, il va vraiment effacer physiquement cette valeur
et mettre ce que obtenir des rendements int.
Et puis vous allez Imprimer ce qu'ils sont entrés.
>> Public: Et qui est va être dans le tas?
>> ANDI Peng: Cela va comme dans le tas.
>> Public: Et pour que sera accessible.
ANDI PENG: Exactement.
Agréable.
Bien.
>> Auditoire: Alors, quand nous libérons ptr à ce dernière étape, nous libérons le pointeur
ou nous libérer le bloc?
ANDI PENG: Ouais.
Donc, nous libérant le pointer-- ainsi, libérer le bloc de mémoire.
Donc, la seule façon dont nous pouvons même l'accès la mémoire est en ayant le pointeur.
Si vous ne possédez pas le pointeur, vous êtes comme, oh, je ne sais pas où il est,
droit?
Donc, si vous libérez, vous êtes essentiellement libérant ce que tout le bloc.
Ensuite, votre ordinateur sait, oh, il n'y a rien utilisables ici,
Je peux juste mettre les ordures les valeurs de retour en elle à nouveau.
>> Auditoire: Alors entiers existent à ce sujet?
>> ANDI PENG: existent-ils entiers?
Pardon.
Pouvez-vous reformuler votre question?
AUDIENCE: Je voulais dire, après que vous libérez le pointeur, le nombre entier que vous obtenez,
aura qui existent encore?
>> PENG ANDI: Non, il ne sera pas.
Ou du moins, il va exister dans votre mémoire avant de votre ordinateur ne
que ce soit avec elle, mais il ya aucun moyen pour vous d'obtenir cela.
Parce que vous avez libéré le pointeur.
Vous ne savez pas où il est plus.
Ouais.
>> Je vais passer ici.
Ouf.
Donc, nous sommes à travers beaucoup de conceptuel difficultés de gestion de la mémoire
et nous allons juste passer essentiellement
5, 10 minutes aller sur les choses de syntaxe
seront utilisables et utiles pour vous les gars, mais rien de trop conceptuel là-bas.
D'ACCORD.
>> Donc, nous sommes complètement changer de vitesse ici.
Gestion de la mémoire, difficile. Pointeurs, difficile. Oui.
Il est vraiment, vraiment dur.
Tout à fait bien.
Voilà pourquoi votre pièce est va être vraiment difficile.
Mais si vous allez faire les choses que nous sommes
censé faire, assurez- sûr que les choses sont nulles,
assurez-vous de vérifier si les choses sont null, assurez-vous de libérer de la mémoire,
assurez-vous que les choses ne sont pas fuite, vous serez bon.
Vous serez mis.
Bien.
Nous allons donc à se déplacer dans cette tout nouveau concept de redirection.
Et donc avant aujourd'hui, le principal moyen que nous avons
été en interaction avec notre programmes est de l'entrée standard
et la sortie standard.
Droit?
En tant que l'entrée utilisateur choses et l'ordinateur
crache de nouveau à nous dans le terminal.
>> Mais il existe d'autres façons pour nous de interagissons
avec l'ordinateur avec notre des programmes qui ne sont pas juste moi
choses frappe physiquement quand je suis invité.
Et la façon dont nous faisons cela est à travers la carotte supérieure
et le symbole de la conduite.
Ainsi, nous pouvons également lire et écrire dans des fichiers en utilisant cela.
>> Ainsi, la manière que nous le faisons est le supérieure à la carotte, tout ce qui est en train de faire
est écrit quel que soit votre fichier a un fichier séparé.
Ainsi, par exemple, si je voulu courir Bonjour tout le monde
et je voulais la sortie être sauvé dans un autre fichier
et pas seulement imprimé à moi, je peut juste faire plus de carotte,
output.txt.
Donc tout ce qui est à faire est de prendre mon programme de hello.world,
et quelle que soit la sortie est, il est sauver dans un fichier appelé output.txt.
Ainsi, la manière que David a fait le .csv avec les noms des étudiants,
il est le même que vous les gars peuvent faire.
>> Et ce qui est particulièrement utiles ici sont les plus
than-- la carotte supérieure à deux signes que vous pouvez ajouter à une sortie
fichier, ce qui signifie que vous pouvez simplement ajouter sur le dessus de celui-ci.
Vous pouvez simplement continuer à ajouter à output.txt de chaque chose supplémentaire
que vous faites.
Ou, si vous commencez à entrer dans plus de programmes complexes, les deux plus
que la carotte, qui vient de gravures les messages d'erreur.
Donc, dire que vous avez un géant quantité de messages d'erreur
et vous voulez lire par chacun d'eux et vous
ne veulent pas avoir à faire défiler grâce à votre terminal,
vous pouvez réellement faire juste supérieure à output.txt
et ça va pour sauver tous vos erreurs
dans un fichier appelé output.txt que vous pouvez passer et lire.
AUDIENCE: Où est le fichier texte sauvé?
PENG ANDI: Il est enregistré dans le même répertoire que votre programme est.
Donc, vous allez juste en arrière et regarder pour elle.
Et la même chose que nous peut faire pour entrée est
que nous pouvons réellement prendre le contenu de certains fichiers
et nous ne pouvons que entrée dans notre programme.
Ainsi, plutôt que d'avoir à faire la commande les arguments de ligne de l'endroit où vous physiquement
avoir à taper des choses à chaque fois, vous
peut en fait juste avoir un fichier appelé input.txt qui vient met all-in.
>> Et puis tuyau est particulièrement cool parce que il peut prendre la sortie d'un programme
et l'utiliser comme l'entrée d'un autre programme.
Ainsi, par exemple, dans Vigenere de vos gars, il est cette ligne de code que vous
les gars sont en cours d'exécution que vous peut-être peut- ne savait pas vraiment ce qu'il était doing--
ce ./generate 1,000 tuyau ./42.
Droit?
>> Donc tout ce qui est à faire, si nous venons jetez un oeil à cette étape par étape,
l'./generate, cela signifie que je suis l'exécution de mon programme de générer.
Qui est prise en 1000 à son entrée.
Je tiens donc à générer 1.000 aléatoire numéros et je vais tuyau that--
ou je vais utiliser that-- sortie comme entrée pour mon programme appelé trouvaille.
Et je vais essayer de trouver 42 des les nombres générés de celles de 1000
les chiffres.
Est-ce que cette ligne de code rend sens pour tout le monde?
>> Ainsi de cette façon nous économisons nous une tonne d'étapes.
Nous ne devons pas courir générer, enregistrer le fichier et puis le mettre dans trouvaille.
Nous ne pouvons tout simplement tout faire en une seule ligne.
Donc tout ce que génèrent est sortie, plop le droit de retour dans à trouver.
Ouais?
>> Public: Et en termes de commande arguments de ligne, est que ce that--
trois arguments de ligne de commande?
Il est de générer, find-- pas, four-- générer, 1000, trouver et 42?
Ou est the--
ANDI PENG: Donc, le tuyau n'a pas vraiment compter comme un argument de ligne de commande
parce que le compilateur ou le terminale sait que tuyau,
Oh, je sais que je dois regarder avant le tuyau parce que ma production est
et je dois veiller à la parce que ce tuyau est mon entrée.
Donc, il sait l'that-- ./generate et 1000,
ce sont deux commandes puis arguments juste pour le premier programme.
Et puis le ./find 42 sont deux commande arguments de ligne pour le deuxième programme.
Ouais.
Tout le monde sur cette bonne?
>> Il suffit donc de réel rapide, qu'est-ce que ces trois lignes de code?
Assez simple.
Quelqu'un veut-il me dire ce que la première ligne fait?
AUDIENCE: [inaudible].
>> ANDI PENG: Pensez-y comme just-- qu'est-ce que la plus grande que la carotte faire?
>> PUBLIC: Il met quelque chose dans la ligne suivante.
ANDI PENG: Alors, quelle est à l'opposé de ce que?
PUBLIC: Il met la prochaine chose dans la première chose.
ANDI PENG: Ouais.
Donc tout ce qui est fait est que vous êtes l'exécution d'un programme .hello--
vous exécutez un programme nommé bonjour.
Vous allez lui donner une entrée appelée input.txt.
Droit?
Parce que le considérer comme juste aller physiquement dans bonjour.
Et puis vous allez enregistrer le sortie dans un fichier appelé output.txt.
Que diriez-vous de la deuxième ligne?
Vous voulez me dire ce que la deuxième ligne fait?
AUDIENCE: [inaudible].
ANDI PENG: Désolé.
Répète ça.
Elliot.
>> Auditoire: Alors, il met un liste des numéros dans trouvaille.
>> ANDI PENG: Ouais.
Donc, trouver, rappelez-vous, dans Pour l'exécuter, vous trouverez
besoin de savoir où vous êtes à la recherche.
Et donc tout ce qu'il fait ici est qu'il est en vous donnant
un ensemble de pré affectées de numéros, puis trouver qui se passe
pour rechercher ceux pour le nombre de 42.
Et puis 15.
Rappelez-vous, vous les gars couru ce lorsque vous avez testé votre code.
Comprenez-vous maintenant ce qu'il faisait?
>> PUBLIC: Il est la mise en le jeu d'instructions
à [inaudible] par un trois par trois pour obtenir the-- pour gagner le match.
>> ANDI PENG: Ouais.
>> PUBLIC: Il entre ceux instructions dans le programme.
>> ANDI PENG: Pretty much.
Ainsi, le CS50 tilde. / Pset3 / 3x3, tout ce qui faisait était que nous avons créé un texte
fichier qui avait tout le titres prêts à vous les gars.
Et pour votre jeu à jouer, vous just-- nous mettons simplement que dans votre programme.
Donc, nous avions créé ce conseil d'administration et puis nous sommes
mettre ce conseil dans votre programme qui a eu lieu et a créé une tuile de trois
par trois.
Voilà tout ce qu'il faisait.
>> Et donc il y avait effectivement la magie aller dans les coulisses
que vous les gars n'a pas programme que nous avons programmés.
Mais maintenant, vous les gars comprendre pourquoi nous l'avons fait il est donc tout bon.
Bien.
>> Ainsi, alors que la redirection est un très utile, C comporte un mécanisme général
pour la lecture et l'écriture fichiers de son propre.
Rien conceptuellement difficile ici, donc je suis
juste aller à travers vraiment, vraiment rapide.
Tout ce qu'il est est certaine mémorisation et en vous assurant gars
sont syntaxiquement l'utiliser correctement.
La façon dont nous ferions qui est créer une référence au fichier,
nous aimerions ouvrir le fichier, puis nous ferait toute la lecture et l'écriture
et puis fermez le fichier.
Lorsque vous les gars chose vouloir garder à l'esprit est
que tout en faisant cela, parce nous sommes fermeture et l'ouverture des fichiers,
l'ensemble de ces commandes sont inclus dans le standard-- la norme I / O
bibliothèque.
Donc, assurez-vous que chaque fois que vous êtes faisant cela que vous avez included--
# included-- E / S standard dot h.
>> Donc réel rapidement.
La première étape, vous voulez créer une référence à ce fichier.
Et maintenant que nous avons des pointeurs fait, vous les gars peuvent me dire ce que cette ligne de code
fait.
Droit?
Tout ce qu'il fait est la création d'un pointeur fichier de fichier de type nommé.
Parce que vous savez que ça va pour pointer vers un fichier et vous êtes
va ouvrir le fichier.
Alors vous êtes f open-- tous ce qu'il fait est d'ouvrir le fichier.
>> Ceci est le nom du fichier.
Et il ya trois choses que vous pouvez faire.
Vous pouvez lire, écrire ou ajouter.
Plus généralement, les gars seront lecture ou l'écriture
parce que vous êtes soit allez être l'introduction d'un fichier ou d'une sortie.
Donc assez bien r et w sont les deux choses que vous allez être en utilisant la plupart.
>> Donc dans ce cas, tout ce que je l'ai fait est créer un pointeur vers un fichier appelé fichier.
Je l'ouvrir et je suis reading-- je suis ouvrir ce fichier appelé fichier.txt
et je le lire.
Voilà tout ce que je fais en ce moment.
Et puis ce sont des fonctions juste au que vous pouvez lire des choses différentes
ou écrire des choses différentes ou passer à des endroits différents
où vous voulez regarder.
Tous ces éléments sont en ligne.
Tous ces il vous suffit de Google.
Pas besoin de les mémoriser.
Ils sont juste là, jetable pour votre utilisation
si vous souhaitez être en mesure de les utiliser.
>> Donc, si je voulais juste de lire dans un caractère à la fois,
Je ferais fichier fgetc.
Ou si je voulais lire dans une ligne de texte à la fois, je le ferais fgets.
Et ainsi de suite.
Tous ces suffit de faire différente choses que vous les gars peuvent utiliser.
>> Et puis enfin, après que je suis fini de lire ou d'écrire,
Je vais juste fclose ce fichier.
Et rappelez-vous, ceci est un de ceux qui, rappelez-vous, s'il vous plaît
faire ceci ou bien votre fichier ne va pas au travail.
Toujours ouvrir un fichier avant lecture ou lecture,
vous devez toujours fermer si vous l'ouvrez.
Même chose avec la mémoire, non?
Vous devez toujours prendre la mémoire et la libérer.
Ici, vous devez toujours ouvrir un déposer avant d'essayer de le lire
et vous avez toujours fermer après que vous l'ouvrez.
>> Donc, cela est également en ligne.
Je vais vous mettre au défi les gars à genre d'écrire un programme qui imprime
hello.world dans un fichier.
Il est vraiment simple.
Il implique essentiellement juste les quelques lignes de code
qui ont été simplement écrit précédemment.
Vous allez les mettre ensemble et écrire que.
>> Donc certaines choses importantes à garder à l'esprit pendant que vous les gars essaient de l'utiliser.
Si tout cela est très utile pour votre pset cette semaine,
est que fopen crée un pointeur de fichier.
Il est pas réellement le fichier physique.
Tout ce qu'il pointe vers le fichier que vous souhaitez ouvrir.
Et vous êtes essentiellement, à chaque fois vous utilisez l'un des autres fonctions
comme fread ou fwrite ou fgetc ou fgets, est
que vous soyez juste de passage autour de cette pointeur vers l'ensemble de ces fonctions.
Donc, vous ne prenez pas de ce que déposer et de l'utiliser pour vos fonctions,
vous êtes juste en prenant le pointeur et mettre à ces fonctions
de sorte que vous pouvez utiliser.
>> Et si vous oubliez de fermer votre fichier après l'avoir utilisé,
votre programme va fuite de mémoire.
Essentiellement, tout ce que les moyens est que les mauvaises choses vont arriver
et votre programme sera ne pas fonctionner correctement.
Et ainsi de suite dans le pset Au début, je pense
il ya un court où il explained-- Nate explained-- ce Valgrind était.
Tout est Valgrind est une façon pour vous de assurez-vous que vous n'êtes pas une fuite mémoire.
Donc, vous voulez les gars à faire que vous regardez ce court
parce que l'explique très bien ce qui se passe.
D'ACCORD.
Alors je suis allé à travers ce vraiment, très rapidement parce que je vraiment
vouloir apprendre à parler le pset avant vous les gars congé.
Quelqu'un at-il des questions sur le plan conceptuel?
Effacer tout cela est juste que la syntaxe vous pouvez utiliser pour lire ou écrire des fichiers.
>> Enfin, le favori de tout le monde.
Nous allons parler de la pset maintenant.
Donc, à main levée, combien de vous les gars lire la spec cette semaine?
Oh, soit la moitié.
C'est bien.
Donc, cela est en fait un très, pset vraiment amusant dans le sens
que vous vous sentez comme un détective parce que vous êtes
faire toutes ces choses vraiment cool que vous ne saviez pas que vous pourriez faire
mais maintenant il est vraiment cool que vous pouvez les faire.
Et il est effectivement beaucoup plus simple que vous en pensez.
>> Ainsi, les moitiés de base de ce programme sont que vous êtes
allez télécharger le code source ou code de distribution écrit par nous.
Et vous allez avoir un dossier appelé BMP et un autre dossier
appelé JPG.
Au sein de votre BMP, vous êtes va avoir trois programmes.
L'un d'eux est déjà écrit pour vous.
Donc copy.c est un programme Nous avons déjà écrit
pour vous que vous allez télécharger.
Tout ce qui ne fait que prendre en entrée une image et fait une copie de celui-ci en sortie.
Voilà tout ce fichier est en train de faire.
>> Mais ce que vous voulez faire pour whodunit-- donc combien d'entre vous
les gars se souviennent en cinquième année ou maybe-- vous êtes peut-être younger-- troisième année,
quand vous avez eu des messages secrets et vous aviez à mettre un morceau de papier sur elle
à décoder le message?
Ouais?
Voilà donc tout ce que nous faisons sauf que cette fois pour un ordinateur.
Donc, nous vous avons donné cette belle image.
Ne ressemble pas quoi que ce soit mais en dessous
il est un indice qui va vous aider avec répondre à la question que nous vous demandons.
>> Essentiellement, ce que vous voulez à faire est entrée ce fichier,
modifier certaines choses autour, peut-être ajuster les couleurs,
changer les choses, de sorte que tout le message est peut venir à travers.
Donc, à l'intérieur se cachent et les informations de pixels
que si vous écrivez votre code correctement va décoder et vous dire
ce que cet indice est.
Et ainsi de quelques conseils utiles sur la façon dont vous iriez à propos de cette approche.
>> Vous voulez vraiment familiariser vous avec le fichier I / O
parce que nous sommes la lecture à partir de fichiers et l'écriture de fichiers.
Droit?
Et donc, chaque fois que nous faisons que, qui implique
File I / O. Tu vas avoir à vous familiariser
avec, comment voulez-vous ouvrez des fichiers de photos?
Comment écrivez-vous à des fichiers comme des photos?
Comment faites-vous toutes ces choses?
Ça va être vraiment utile.
>> Deuxièmement, comment allez-vous va être en mesure de changer
les couleurs qui éclaircir cette image?
Il va probablement impliquer ajuster vos pixels ou vos valeurs RVB
quelque part là-dedans, essentiellement.
Il n'y a aucun moyen de droit résoudre ce aussi longtemps que vous
can-- aussi longtemps que vous le pouvez sorte de ajuster ces pixels pour le faire
ressembler à quelque chose que vous vous souciez.
Voilà tout ce que nous préoccupons aussi bien.
Donc, il ya beaucoup de façons de le faire.
Juste jouer avec elle jusqu'à ce vous obtenez quelque chose qui fonctionne.
Et vous seriez vraiment surpris de voir comment quelques lignes de code
vous devez effectivement faire.
Je parle comme trois lignes de code totale
que vous devez écrire pour ce faire.
Donc, si vous vous trouvez écriture 40, 30 lignes de code,
vous êtes probablement faire mal.
Tout ce que vous avez à faire est une sorte de jouer avec les couleurs
et voir comment cela fonctionne.
>> Alors nous nous dirigeons vers un peu à plus fort d'un problème.
Ici, nous avons redimensionner où nous vous demandons
to-- nous vous donnons comme entrée une image et votre redimensionnement
cette image en quelque chose plus grand ou plus petit quelque chose
en fonction des dimensions que nous vous donnons.
Alors rappelez-vous dans la leçon que David rapidement
jeta un regard sur la façon dont l'information est détecté par vos ordinateurs
pour signifier qu'il est un type de fichier.
Ainsi, un fichier Word dispose spéciale caractères devant que
dire à votre ordinateur, il est un fichier Word.
Même chose avec un fichier JPEG.
Dans ce cas, nous allons pour vous donner un fichier JPEG.
Tout ce que nous savons est que JPEG fichier est une image, non?
Mais les distingue informatiques dans des domaines très spécifiques.
Ainsi, au début de tout fichier JPEG, vous êtes
va avoir ce qu'on appelle le bitmap Renseignements tête et l'en-tête de fichier bitmap.
Tous ceux qui sont sont différents éléments de données
qui racontent votre ordinateur, hé, écoutez, un JPEG venir
et ce sont les dimensions ou caractéristiques de ce JPEG.
>> Alors vous les gars veulent vraiment savoir quelle information est stockée à l'intérieur
de ces têtes et quelle est la taille d'entre eux.
Parce que quand vous courez dans votre programme,
vous allez vouloir sauter ce montant.
Droit?
Parce que vous ne vous souciez pas sur la modification du tête,
vous vous souciez de modifier ce qui est après.
Droit?
Alors assurez-vous les gars savent comment ces choses sont grandes.
>> Deuxièmement, avant de commencer essayer de redimensionner votre image,
vous allez probablement vouloir enregistrer les dimensions de l'original.
Droit?
Parce que si je vous dis cette image est de 100 pixels par 100 pixels,
et je veux que vous fassiez quatre fois plus grand,
vous savez que vous avez à multiplier ces dimensions par quatre.
Ainsi donc, vous voulez un fichier de sortie 400 par 400 pixels, par exemple.
Donc, il est vraiment utile pour vous les gars à enregistrer les dimensions de l'original.
Et puis après, après vous avez terminé le redimensionnement,
vous pouvez écrire de nouvelles têtes avec ces nouvelles dimensions après le redimensionnement.
>> Et la façon dont vous physiquement peut créer de gros pixels
est que vous pouvez écrire nouvelle RGB-- rappelez-vous, RVB,
tout ce qui est synonyme de rouge, vert, et les pixels blue-- à un fichier sur.
Et vous allez vouloir avoir des quantités différentes de ce que
nous appelons rembourrage.
Tous les espaces sont rembourrage est photos avant et après
que dire essentiellement que your-- dire à votre image comment grand, il
devrait prendre place.
Ceci est très abstraite pour beaucoup de vous si vous ne l'avez pas lu la spec pset,
mais il va être très utile lorsque
vous êtes en train de lire à travers elle.
Vous êtes comme, oh, oui, cela fait sens.
Pourquoi dois-je faire cela?
Fait sens.
>> Enfin, ce qui est probablement l'un des programmes les plus frustrantes
jamais juste parce que vous ne pouvez pas dire si ça marche ou pas.
Tout ce programme, récupérer, est faire est que, si fonctionner correctement,
il doit être capable de soudain récupérer 50 images
ont été perdus sur notre disque dur.
Et donc le problème avec ce programme est que vous ne pouvez pas vraiment le tester
soit parce que vous avez récupéré eux ou vous ne l'ont pas.
Et si vous sorte de juste avoir à jouer avec elle,
et si votre programme est fonctionne correctement, vous allez
voir tout à coup que dans votre répertoire que vous avez
obtenu une quantité gigantesque de images qui sont maintenant là-bas.
>> Alors, comment je approcher ce problème est, nous sommes
va vous donner ce qui est appelé un fichier card.raw.
Essentiellement, voilà juste un fichier corrompu
avec toutes les images stockées que vous allez avoir besoin de récupérer.
Donc, vous allez probablement vouloir à l'entrée de votre card.raw, ou ouvert,
votre fichier et vous êtes card.raw allez vouloir manipuler
qu'il soit capable de stocker les fichiers JPEG.
>> Donc, je voudrais commencer par le suivi et le stockage chaque individu JPEG que vous trouver.
Tu ne vas pas à tous individuellement d'un coup, il suffit de créer tous les 50 fichiers JPEG.
Vous allez vouloir garder trace de combien vous ouvrez.
Et puis vous voulez assurez-vous que, lorsque vous êtes
écriture à un buffer-- vous les gars va savoir ce que je parle
une fois que vous lisez le spec-- vous voulez assurez-vous que vous utilisez un unsigned
omble tampon.
>> Et puis, vous voulez poser vous la question de,
le nombre d'octets se trouvent dans une CF-- sont dans un fichier de la carte?
Voilà combien vous allez envie de lire dans votre mémoire tampon.
Vous allez vouloir vous assurer les deux align car alors vous
aura pas mémoire vive fuite.
Vous savez exactement combien octets dont vous avez besoin et combien
octets que vous voulez qu'ils ont.
>> Et puis finalement, vous voulez utiliser une fonction appelée sprint--
s Imprimer F-- pour générer fichier personnalisé noms pour chaque nouveau JPEG que vous trouvez.
Donc, comme vous créez et trouver des fichiers JPEG sur votre carte,
vous allez vouloir les stocker et de les nommer.
Droit?
Et si vous allez vouloir utiliser cette fonction
pour créer les noms qui peut stocker tous vos fichiers JPEG.
>> Et enfin, ne pas oublier de fermer chaque JPEG lorsque vous avez terminé.
Parce que ce que vous êtes va faire est vous êtes
allez avoir probablement une sorte de boucle qui
parcourt l'ensemble de vos fichiers JPEG.
Vous allez écrire un fichier JPEG et renommez-le comme vous le trouverez.
Mais lorsque vous avez terminé avec chaque seule JPEG,
vous devez fermer afin que vous puissiez commencer cours et de passer à l'image suivante.
Et si quelque chose qui est vraiment amusant que nous aimons faire,
parce que cela est un tel problème bizarre réglé mais aussi un problème étrangement satisfaisante
ensemble, est que toutes les photos que nous avons avoir pour vous, si vous récupérer correctement,
toutes les photos sont des photos de votre merveilleux personnel enseignant, à la fois
de Harvard, au ici-- et ici, à Yale.
Et si vous arrivez à récupérer toutes ces photos
et d'identifier le personnel les membres de ces cartes,
et de prendre selfies avec nous si vous nous trouverez sur le campus,
pour chaque photo que vous nous soumettez, nous allons vous donner un gigaoctet d'espace Dropbox.
>> Alors, faisons le calcul ici.
Si il ya 50 photos et 50 membres du personnel de l'enseignement,
si vous arrivez à trouver tous les 50 du nous, qui est de 50 giga-octets de Dropbox,
Fondamentalement, nous vous donnerons les gars.
Ainsi, certaines incitations supplémentaires ajoutés si vous les gars n'a pas seulement
soucier de récupérer des images perdues.
Il ya aussi des incitations supplémentaires.
Il est un ensemble de problème amusant.
Ça l'est vraiment.
Il est un peu frustrant, mais il devient vraiment amusant quand vous réalisez,
wow, ça marche et maintenant je avoir toutes ces photos
que je viens de créer par moi-même.
>> Des questions sur le jeu de processeurs?
Pour quelqu'un qui est déjà commencé, si vous avez des questions,
Je serai là pour quelques minutes après section si vous voulez me parler.
Bravo, les gars.
Je suis désolé, je informations déversés sur vous les gars.
Les pointeurs sont vraiment, vraiment difficile et frustrant.
>> Et je suis vraiment heureux que vous les gars sont restés avec moi.
Nous parlerons plus en profondeur au sujet de la semaine prochaine
que nous commençons à faire des tables de hachage et plus de fonctions qui les concernent.
Ouais.
Donc, si quelqu'un a des des questions, je serai autour.
Merci d'être venu et de prendre plus des bonbons parce qu'il n'y a plus de bonbons.
Frais.