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