1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON HIRSCHHORN: Bienvenue A5, tout le monde. 3 00:00:07,820 --> 00:00:11,270 Nous avons une semaine excitante devant nous, principalement parce qu'il ya tellement de nouveau 4 00:00:11,270 --> 00:00:12,350 visages dans cette salle. 5 00:00:12,350 --> 00:00:12,920 C'est merveilleux. 6 00:00:12,920 --> 00:00:15,740 Beaucoup d'entre vous sont ici par accident, ce qui est encore mieux. 7 00:00:15,740 --> 00:00:18,220 Donc, j'espère que vous allez continuer à vous joindre à nous. 8 00:00:18,220 --> 00:00:20,220 >> Cette semaine, nous allons passer l'essentiel de l'article 9 00:00:20,220 --> 00:00:21,870 préparation pour le quiz. 10 00:00:21,870 --> 00:00:26,580 Donc, par l'ordre du jour, nous allons parler un peu de ressources pour la classe, 11 00:00:26,580 --> 00:00:30,350 mais aussi pour le quiz, puis, de nouveau, passer l'essentiel de parler de classe 12 00:00:30,350 --> 00:00:31,390 sur des questions. 13 00:00:31,390 --> 00:00:33,900 Une fois que nous aurons fini de répondre à votre questions, ou si vos questions 14 00:00:33,900 --> 00:00:39,010 naturellement nous conduire à une certaine codage, je avoir des problèmes d'échantillonnage de mi-session 15 00:00:39,010 --> 00:00:43,180 passé que nous allons coder en direct dans la section ainsi que mettre également en place une autre 16 00:00:43,180 --> 00:00:45,420 bons sujets à couvrir. 17 00:00:45,420 --> 00:00:48,280 >> Alors d'abord, comme nous l'avons vécu pour le deux dernières semaines pour vous rappeler 18 00:00:48,280 --> 00:00:51,700 les gars, il ya une tonne de ressources disponible pour ce cours. 19 00:00:51,700 --> 00:00:55,020 Beaucoup d'entre eux seront très utiles de vous que vous continuez à 20 00:00:55,020 --> 00:00:57,280 étudier pour quizz 0, car c'est mardi après-midi. 21 00:00:57,280 --> 00:00:59,630 Donc, vous avez tous été étudier un peu. 22 00:00:59,630 --> 00:01:02,640 >> Il ya des notes de cours et la source Code que vous devriez 23 00:01:02,640 --> 00:01:04,050 absolument vérifier. 24 00:01:04,050 --> 00:01:05,019 Regardez les shorts. 25 00:01:05,019 --> 00:01:07,470 Découvrez study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Et puis, énumérés ci-dessous, un certain nombre d'autres ressources. 27 00:01:11,770 --> 00:01:14,020 >> Encore une fois, quizz 0, c'est demain à 01 heures. 28 00:01:14,020 --> 00:01:18,230 Si vous ne l'avez pas déjà fait, vérifiez le propos de Quiz 0 document sur la 29 00:01:18,230 --> 00:01:21,370 la page d'accueil de cours pour comprendre où vous prenez le quiz. 30 00:01:21,370 --> 00:01:25,770 Le quiz commence à 01h10 et se termine 70 minutes plus tard. 31 00:01:25,770 --> 00:01:29,610 Donc, si vous vous présentez après 01h10, vous êtes allez obtenir que beaucoup moins de minutes 32 00:01:29,610 --> 00:01:30,940 de 70 à prendre le quiz. 33 00:01:30,940 --> 00:01:33,570 Donc, assurez-vous que vous êtes à l'heure. 34 00:01:33,570 --> 00:01:38,690 Si vous êtes un étudiant ou d'extension ont d'autres considérations d'essai, il 35 00:01:38,690 --> 00:01:40,400 pourrait ne pas être à 01 heures demain. 36 00:01:40,400 --> 00:01:43,540 Mais encore une fois, vérifier le propos Quiz 0 documenter pour s'assurer que vous savez quand 37 00:01:43,540 --> 00:01:44,760 vous prenez le quiz. 38 00:01:44,760 --> 00:01:46,440 J'ai écrit 75 minutes ici. 39 00:01:46,440 --> 00:01:48,580 Je pense que c'est bon, pas 70. 40 00:01:48,580 --> 00:01:53,420 >> Il couvre tout le matériel d'une semaine 0 à la conférence de la semaine dernière, le mercredi. 41 00:01:53,420 --> 00:01:59,350 Et encore une fois, pour ce quiz, par qui document, vous obtenez un recto-verso et 8 42 00:01:59,350 --> 00:02:03,770 1/2 par 11 feuille de papier que vous obtenez à utiliser comme des notes pendant le test. 43 00:02:03,770 --> 00:02:08,570 Beaucoup de gens, si pas la plupart des gens, ont constaté que la façon la plus utile 44 00:02:08,570 --> 00:02:11,970 à étudier pour le quiz est à faire une feuille d'étude, une 45 00:02:11,970 --> 00:02:13,730 un sider, de leur propre chef. 46 00:02:13,730 --> 00:02:17,710 Alors regardez les dernières si vous avez vu les dernières. 47 00:02:17,710 --> 00:02:19,960 Tendez la main à des amis pour voir ce qu'ils mettent sur le leur. 48 00:02:19,960 --> 00:02:23,610 >> Mais les mains vers le bas, la meilleure façon possible étude est de passer par tout et 49 00:02:23,610 --> 00:02:26,530 rogner vers le bas à ce qui devrait ou ne devrait pas appartenir à cette feuille de 50 00:02:26,530 --> 00:02:30,570 papier, parce que c'est juste une très moyen utile pour vous assurer 51 00:02:30,570 --> 00:02:33,620 vous allez à travers tout et avoir une certaine familiarité avec elle. 52 00:02:33,620 --> 00:02:36,690 La plupart des gens, nous trouver, même si elles ont la feuille de papier assis juste 53 00:02:36,690 --> 00:02:39,840 à côté d'eux sur le questionnaire, ne mettez pas pour elle, parce que, encore une fois, que très 54 00:02:39,840 --> 00:02:43,290 processus de passer par l'information les a aidés à apprendre. 55 00:02:43,290 --> 00:02:45,370 >> Quelqu'un at-il des questions Quiz 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 A tout le monde - 58 00:02:51,450 --> 00:02:53,230 Je ne vais pas faire un spectacle de mains. 59 00:02:53,230 --> 00:02:53,550 Ce n'est rien. 60 00:02:53,550 --> 00:02:54,790 J'allais demander qui commencé à étudier. 61 00:02:54,790 --> 00:02:58,360 Mais je ne veux pas vous faire tout pas lever la main. 62 00:02:58,360 --> 00:03:01,290 Donc, comme je l'ai dit - oui, Avi, aller de l'avant. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Quelle serait une chose utile à mettre sur le document d'une page? 64 00:03:04,205 --> 00:03:05,875 >> ETUDIANT: C'est à vous. 65 00:03:05,875 --> 00:03:08,210 >> JASON HIRSCHHORN: Vous obtenez d'utiliser votre jugement. 66 00:03:08,210 --> 00:03:13,220 Choses utiles à mettre sur le document d'une page, Si vous êtes confus au sujet du grand O 67 00:03:13,220 --> 00:03:17,510 l'exécution de différents types de recherches et sortes, mis que là-bas dans un 68 00:03:17,510 --> 00:03:18,760 pratique graphique dandy. 69 00:03:18,760 --> 00:03:22,250 De cette façon, si vous êtes invité que sur la quiz, vous n'avez pas besoin d'essayer de comprendre 70 00:03:22,250 --> 00:03:23,560 it out ou la raison par le runtime. 71 00:03:23,560 --> 00:03:24,730 Vous pouvez simplement copier vers le bas. 72 00:03:24,730 --> 00:03:28,320 Si vous regardez quiz passé, beaucoup de fois, il est en cours d'exécution des questions de temps. 73 00:03:28,320 --> 00:03:34,150 Donc, ce serait un exemple de bonne chose à mettre sur votre document d'une page. 74 00:03:34,150 --> 00:03:37,450 >> D'autres bonnes choses à mettre sur, si vous êtes confus sur la façon de déclarer un 75 00:03:37,450 --> 00:03:40,570 fonction ou ce que les différentes parties de la déclaration de fonction sont, écrire 76 00:03:40,570 --> 00:03:43,400 que là-bas, une version générique et alors peut-être un exemple. 77 00:03:43,400 --> 00:03:47,290 Si vous êtes confus au sujet de pointeurs, un schéma de la façon dont les pointeurs travail est 78 00:03:47,290 --> 00:03:48,660 probablement très utile. 79 00:03:48,660 --> 00:03:52,440 Si vous êtes confus au sujet de la récursivité, un goûter fonction récursive sur il 80 00:03:52,440 --> 00:03:54,980 pourrait également s'avérer très utile. 81 00:03:54,980 --> 00:03:57,290 Est-ce que vous donner quelques idées? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Vous devez comprendre la processus de compilation entière, comme 83 00:04:01,820 --> 00:04:03,220 comment tout cela fonctionne? 84 00:04:03,220 --> 00:04:06,620 >> JASON HIRSCHHORN: Tout qui a été couverte pourrait 85 00:04:06,620 --> 00:04:08,060 apparaître sur le questionnaire. 86 00:04:08,060 --> 00:04:08,930 Questions - 87 00:04:08,930 --> 00:04:11,300 mais encore une fois, certaines choses seront peser lourdement que d'autres. 88 00:04:11,300 --> 00:04:14,330 Certaines choses se sont à nouveau et de nouveau dans la classe, dans 89 00:04:14,330 --> 00:04:15,590 conférence, et de l'article. 90 00:04:15,590 --> 00:04:17,220 D'autres choses n'ont pas venir souvent. 91 00:04:17,220 --> 00:04:22,900 >> Nous avons beaucoup parlé de # include et -L quelque chose et ce que cela signifie dans les 92 00:04:22,900 --> 00:04:24,390 le processus de compilation. 93 00:04:24,390 --> 00:04:29,120 Nous avons beaucoup parlé de GDB, accrochez vous, ces différents drapeaux que nous utilisons quand 94 00:04:29,120 --> 00:04:33,100 nous compilons quelque chose, et ce make15, par exemple, vraiment 95 00:04:33,100 --> 00:04:34,510 moyens et vraiment fait. 96 00:04:34,510 --> 00:04:38,110 Nous n'avons pas parler autant sur chaque étape dans 97 00:04:38,110 --> 00:04:39,240 le processus de compilation. 98 00:04:39,240 --> 00:04:40,410 Nous avons toujours parlé. 99 00:04:40,410 --> 00:04:42,550 Donc, c'est toujours quelque chose que vous devrait être familier. 100 00:04:42,550 --> 00:04:44,610 Mais encore une fois, nous n'allons pas être - 101 00:04:44,610 --> 00:04:49,140 choses qui viennent le plus souvent en classe sont plus susceptibles de trouver plus 102 00:04:49,140 --> 00:04:52,495 souvent et plus fortement pondéré sur le questionnaire. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Toutes les autres questions du quiz 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, alors j'ai mis une liste de sujets sur la carte. 107 00:05:00,050 --> 00:05:01,550 Je suis passé par le programme. 108 00:05:01,550 --> 00:05:07,340 Je suis passé par la section d'examen de la nuit dernière et les diapositives à venir 109 00:05:07,340 --> 00:05:13,710 une liste non exhaustive des sujets que nous avons couvert jusqu'ici dans CS50 110 00:05:13,710 --> 00:05:16,800 et les choses qui pourraient apparaître sur le questionnaire. 111 00:05:16,800 --> 00:05:19,900 Donc, je ne vais pas passer par chacun de ces éléments. 112 00:05:19,900 --> 00:05:22,370 Cela prendra beaucoup plus de temps que nous avons maintenant. 113 00:05:22,370 --> 00:05:26,880 Mais je mets cette place ici dans l'espoir jogging votre mémoire à des choses qui peut 114 00:05:26,880 --> 00:05:28,420 ou peut-être pas aussi familier avec vous. 115 00:05:28,420 --> 00:05:32,850 >> Et je serais ravi de passer la majeure partie de section répondre à vos questions sur 116 00:05:32,850 --> 00:05:35,130 ces sujets, les sujets qui ne sont pas couverts ici. 117 00:05:35,130 --> 00:05:36,130 Nous pouvons écrire du code pseudo. 118 00:05:36,130 --> 00:05:40,010 Nous pouvons écrire le code réel pour s'assurer que vous - 119 00:05:40,010 --> 00:05:44,280 Je ne peux répondre à votre question et aider tout le monde comprend fondamentalement une 120 00:05:44,280 --> 00:05:48,330 beaucoup de ces sujets afin que vous vous sentirez prêt et confortable entrer dans 121 00:05:48,330 --> 00:05:50,150 le quiz demain. 122 00:05:50,150 --> 00:05:52,300 Alors, lisez sur la liste. 123 00:05:52,300 --> 00:05:54,780 Vous êtes venus nous espérons à l'article avec quelques questions. 124 00:05:54,780 --> 00:05:58,480 Lorsque vous êtes prêt, levez la main et nous allons commencer. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Gardez à l'esprit, les questions que vous avez, il n'y a pas de questions stupides. 127 00:06:05,200 --> 00:06:06,250 Nous avons entendu dire que beaucoup de choses. 128 00:06:06,250 --> 00:06:09,490 Et les questions que vous avez, je suis prêt à parier, beaucoup d'autres personnes à la fois 129 00:06:09,490 --> 00:06:11,740 assis ici et regarder en ligne ont ainsi. 130 00:06:11,740 --> 00:06:13,770 Donc, vous ne pouvez aider les gens en posant des questions. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: entre la pile et l' tas, est-il une pré-alloué 133 00:06:18,040 --> 00:06:22,880 pourcentage de mémoire qui est défini comme ceci est pour l'empilage ou pour le tas? 134 00:06:22,880 --> 00:06:25,010 Ou comment ça marche exactement? 135 00:06:25,010 --> 00:06:26,230 >> JASON HIRSCHHORN: Grande question. 136 00:06:26,230 --> 00:06:28,640 Je vais soutenir la trace un peu. 137 00:06:28,640 --> 00:06:30,910 Est-ce que tout le monde - 138 00:06:30,910 --> 00:06:31,660 s'il vous plaît soyez honnête. 139 00:06:31,660 --> 00:06:34,130 Je sais que je vous demande d'augmenter votre main devant vos pairs. 140 00:06:34,130 --> 00:06:38,510 Mais y at-il des gens qui se sentent à l'aise avec la pile et le tas 141 00:06:38,510 --> 00:06:42,980 et voudrait aller plus que et ce que ceux qui veut dire? 142 00:06:42,980 --> 00:06:43,880 Levez la main si - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Merci. 145 00:06:45,120 --> 00:06:48,420 Donc, nous allons aller sur la pile et le tas très rapidement puis 146 00:06:48,420 --> 00:06:50,370 passer à répondre à votre question. 147 00:06:50,370 --> 00:06:58,250 >> Donc, si nous tirons une boîte à représenter mémoire sur votre ordinateur, quels sont 148 00:06:58,250 --> 00:07:02,160 choses qui vont dans cette boîte? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 Une fonction principale. 151 00:07:04,020 --> 00:07:05,890 Où va principal? 152 00:07:05,890 --> 00:07:08,090 >> ETUDIANT: [inaudible]. 153 00:07:08,090 --> 00:07:09,390 >> JASON HIRSCHHORN: Donc, nous allons mettre principal ici. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Que va dans cette boîte? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> ÉTUDIANTS: Les fonctions que vous appelez. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Les fonctions que nous appelons. 159 00:07:19,020 --> 00:07:20,440 Et où vont-ils? 160 00:07:20,440 --> 00:07:21,300 >> ETUDIANT: Dans la pile. 161 00:07:21,300 --> 00:07:22,380 >> JASON HIRSCHHORN: Ils passer dans la pile. 162 00:07:22,380 --> 00:07:27,350 Nous allons donc appeler cette chose ici-bas de la pile. 163 00:07:27,350 --> 00:07:31,880 Et là-haut, nous avons le tas. 164 00:07:31,880 --> 00:07:35,450 Donc, la mémoire n'est pas une boîte comme ça. 165 00:07:35,450 --> 00:07:37,330 Mais il est en fait assez similaire. 166 00:07:37,330 --> 00:07:40,840 Il va y avoir beaucoup de boîtes sur et plus, en fonction de la taille de votre 167 00:07:40,840 --> 00:07:43,730 ordinateur est ou la taille de votre mémoire est. 168 00:07:43,730 --> 00:07:46,950 >> Au guillemets, "bas" est l'empilement. 169 00:07:46,950 --> 00:07:50,880 Et il ya plusieurs choses qui vont sur la pile. 170 00:07:50,880 --> 00:07:53,840 Et elles dépendent les fonctions vous avez dans votre code. 171 00:07:53,840 --> 00:07:57,780 Vous avez toujours une fonction dans votre Code appelée principale, donc il ya toujours une 172 00:07:57,780 --> 00:08:00,480 section ici dans le empiler consacré à principal. 173 00:08:00,480 --> 00:08:03,980 >> Ces sections de la pile sont appelés cadres de pile. 174 00:08:03,980 --> 00:08:09,580 Lorsque vous appelez une autre fonction, dire principale appelle une fonction de recherche binaire, 175 00:08:09,580 --> 00:08:11,075 nous avons mis un autre cadre sur la pile. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Plus précisément, nous allons don d'une partie de la mémoire de notre 178 00:08:17,320 --> 00:08:22,960 ordinateur pour stocker recherche binaire section locale variables et d'exécuter le binaire 179 00:08:22,960 --> 00:08:24,150 Code de recherche. 180 00:08:24,150 --> 00:08:26,810 >> Nous appelons donc la recherche binaire. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 Dans ce morceau de mémoire, nous allons pour stocker ses variables locales. 183 00:08:33,340 --> 00:08:35,270 Nous allons stocker ses appels printf. 184 00:08:35,270 --> 00:08:38,159 Quoi qu'il arrive, cette fonction est va être stockée là. 185 00:08:38,159 --> 00:08:40,350 Recherche binaire va exécuter. 186 00:08:40,350 --> 00:08:42,210 Il va terminer l'exécution. 187 00:08:42,210 --> 00:08:47,450 Quel est le mot en C qui signifie qu'une fonction doit 188 00:08:47,450 --> 00:08:49,306 compléter son exécution? 189 00:08:49,306 --> 00:08:50,040 >> ETUDIANT: Retour. 190 00:08:50,040 --> 00:08:50,870 >> JASON HIRSCHHORN: Retour. 191 00:08:50,870 --> 00:08:53,230 Donc, chaque fois que vous voyez une déclaration de retour, les extrémités de fonction 192 00:08:53,230 --> 00:08:54,350 quand il frappe ça. 193 00:08:54,350 --> 00:08:56,740 Recherche pour binaire va frapper son retour. 194 00:08:56,740 --> 00:09:01,360 Cette partie de la mémoire sera essentiellement être libéré. 195 00:09:01,360 --> 00:09:03,510 Et principal reviendra à exécution. 196 00:09:03,510 --> 00:09:07,240 Alors principal aura une pause où était, appel recherche binaire, obtenir une valeur de retour, 197 00:09:07,240 --> 00:09:08,700 et poursuivre l'exécution. 198 00:09:08,700 --> 00:09:10,840 Ce cadre de pile va disparaître. 199 00:09:10,840 --> 00:09:14,810 >> Si nous appelons une fonction récursive, qui est une fonction qui s'appelle elle-même sur 200 00:09:14,810 --> 00:09:18,480 et plus, nous pourrions avoir - nous disons fait une recherche binaire récursive. 201 00:09:18,480 --> 00:09:21,520 Nous pourrions obtenir binaire version recherche sur un, recherche binaire deux, recherche binaire 202 00:09:21,520 --> 00:09:24,090 trois, quatre recherche binaire, recherche binaire cinq. 203 00:09:24,090 --> 00:09:27,950 Et puis ce dernier recherche binaire cinq a frappé le cas de base, et la pile 204 00:09:27,950 --> 00:09:31,010 Les cadres vont revenir et garder la clôture jusqu'à ce que nous revenions à principal. 205 00:09:31,010 --> 00:09:32,530 Nous pouvons aller plus récursion dans un peu. 206 00:09:32,530 --> 00:09:35,530 Mais tout cela est-à-dire, si vous êtes appeler plusieurs fonctions à la fois, 207 00:09:35,530 --> 00:09:39,250 il y aura pile multiple frames de la pile. 208 00:09:39,250 --> 00:09:42,900 >> Le segment de mémoire, d'autre part, vers le haut ici, n'est pas pour les fonctions, 209 00:09:42,900 --> 00:09:44,380 pas pour les variables locales. 210 00:09:44,380 --> 00:09:48,920 C'est pour allouée dynamiquement variables. 211 00:09:48,920 --> 00:09:57,210 Donc, ce sont des variables qui peuvent être initialisé en soit principale ou une 212 00:09:57,210 --> 00:09:58,640 fonctionner que principaux appels. 213 00:09:58,640 --> 00:10:00,790 N'importe où dans votre code, ils peut être initialisé. 214 00:10:00,790 --> 00:10:04,360 Et pour initialiser une dynamique variable allouée. 215 00:10:04,360 --> 00:10:06,970 Quelle est la fonction en C utilisons-nous? 216 00:10:06,970 --> 00:10:07,600 >> ETUDIANT: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON HIRSCHHORN: Malloc. 218 00:10:09,240 --> 00:10:10,800 Vous appelez malloc. 219 00:10:10,800 --> 00:10:12,260 Vous obtenez un espace de mémoire. 220 00:10:12,260 --> 00:10:15,020 Et que l'espace de la mémoire est sur le tas. 221 00:10:15,020 --> 00:10:18,840 Et que l'espace de la mémoire reste jusqu'à ce que vous appelez gratuitement. 222 00:10:18,840 --> 00:10:22,670 >> Variables pour alloués dynamiquement en tas existera aussi longtemps que vous 223 00:10:22,670 --> 00:10:25,250 voulons qu'ils existent, et ils ne seront pas aller jusqu'à ce que vous explicitement 224 00:10:25,250 --> 00:10:26,760 leur dire de s'en aller. 225 00:10:26,760 --> 00:10:29,670 Vous pouvez les créer dans une fonction. 226 00:10:29,670 --> 00:10:31,930 La pile de cette fonction cadre va disparaître. 227 00:10:31,930 --> 00:10:35,490 Mais cette variable existe toujours dans le segment de mémoire jusqu'à ce qu'il soit libéré, 228 00:10:35,490 --> 00:10:39,650 potentiellement par la fonction qui a appelé recherche binaire ou autre. 229 00:10:39,650 --> 00:10:42,580 >> Donc, ces variables tas y rester aussi longtemps que vous le souhaitez 230 00:10:42,580 --> 00:10:43,490 qu'ils y restent. 231 00:10:43,490 --> 00:10:46,090 Et ils se mettent ici. 232 00:10:46,090 --> 00:10:47,450 Et puis la prochaine se mettre là. 233 00:10:47,450 --> 00:10:50,210 Ils gardent de se remplir, et ils y rester jusqu'à ce que vous appelez gratuitement. 234 00:10:50,210 --> 00:10:52,870 >> Et l'essentiel, le tas et la pile, obtenir à la question de Marcus, 235 00:10:52,870 --> 00:10:54,500 pousser l'un vers l'autre. 236 00:10:54,500 --> 00:10:57,730 Et si ils courent dans l'autre, vous avez utilisé toute la mémoire de votre 237 00:10:57,730 --> 00:11:01,330 ordinateur, et votre programme quitteront parce que vous n'avez pas plus de mémoire 238 00:11:01,330 --> 00:11:02,420 de gauche à utiliser. 239 00:11:02,420 --> 00:11:07,290 Entre eux, il existe potentiellement d'autres choses. 240 00:11:07,290 --> 00:11:10,980 Mais pour le cadre de ce cours, vous n'ont pas besoin de s'inquiéter à ce sujet. 241 00:11:10,980 --> 00:11:12,020 >> C'était donc la réponse à votre question. 242 00:11:12,020 --> 00:11:13,520 Ne vous en faites pas. 243 00:11:13,520 --> 00:11:15,550 Mais c'était la longue réponse. 244 00:11:15,550 --> 00:11:17,800 Tout ce que vous devez savoir, c'est la tas et la pile sera - 245 00:11:17,800 --> 00:11:18,900 on commence par le bas. 246 00:11:18,900 --> 00:11:19,570 La pile ne. 247 00:11:19,570 --> 00:11:20,790 Le tas est là-haut. 248 00:11:20,790 --> 00:11:21,990 Ils vont se rapprocher de l'autre. 249 00:11:21,990 --> 00:11:23,110 >> Et si elles se touchent, c'est un problème. 250 00:11:23,110 --> 00:11:24,500 Vous avez manqué de mémoire. 251 00:11:24,500 --> 00:11:28,760 Mais également, en plus de savoir où ils sont, ce qui est stocké à la fois dans la 252 00:11:28,760 --> 00:11:30,512 pile et le tas. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Quand ils entrent en collision, est que un débordement de pile? 255 00:11:33,570 --> 00:11:35,670 >> JASON HIRSCHHORN: Quand ils entrent en collision, ce n'est pas un débordement de pile. 256 00:11:35,670 --> 00:11:38,340 Un débordement de pile est une zone différente que nous pouvons aller plus si vous voulez. 257 00:11:38,340 --> 00:11:40,020 OK, nous allons revenir à ce que dans un peu. 258 00:11:40,020 --> 00:11:42,730 >> ETUDIANT: Quel est le mot appelé quand ils ont frappé l'autre, la 259 00:11:42,730 --> 00:11:44,450 pile et le tas? 260 00:11:44,450 --> 00:11:46,640 >> JASON HIRSCHHORN: Pour l'instant, ne vous inquiétez pas. 261 00:11:46,640 --> 00:11:47,750 Il suffit de savoir - 262 00:11:47,750 --> 00:11:50,530 Je vais répondre à cette question après la classe. 263 00:11:50,530 --> 00:11:52,680 Si tout se passe dans l'autre, vous avez manqué de mémoire, car il n'y a pas plus 264 00:11:52,680 --> 00:11:53,330 espace là. 265 00:11:53,330 --> 00:11:55,450 >> ETUDIANT: Désolé, ce qui est un défaut de segmentation? 266 00:11:55,450 --> 00:11:58,710 >> JASON HIRSCHHORN: Un segment défaut peut être appelé à - 267 00:11:58,710 --> 00:12:02,240 cela dépend pourquoi appelé de la faute de segmentation. 268 00:12:02,240 --> 00:12:06,260 Parfois, votre débordement de pile, ça va dire segment redire que l'erreur. 269 00:12:06,260 --> 00:12:08,180 >> ETUDIANT: Qu'en est-il de déréférencement une variable nulle? 270 00:12:08,180 --> 00:12:10,040 Est-ce une erreur de segmentation? 271 00:12:10,040 --> 00:12:11,480 >> JASON HIRSCHHORN: déréférencement un pointeur null - 272 00:12:11,480 --> 00:12:17,850 OK, donc si vous avez un pointeur que vous égal à null, pointeurs, rappel, 273 00:12:17,850 --> 00:12:20,270 adresses de la mémoire de stockage que leurs valeurs. 274 00:12:20,270 --> 00:12:23,660 Et un pointeur NULL est essentiellement stocker 0, le 0-ième 275 00:12:23,660 --> 00:12:26,670 répondre à cette variable. 276 00:12:26,670 --> 00:12:30,010 Donc 0x, 0, 0, 0, 0, et ainsi de suite. 277 00:12:30,010 --> 00:12:35,030 Que 0-ème adresse en mémoire qui n'est pas dans notre image, c'est là-haut 278 00:12:35,030 --> 00:12:38,800 quelque part, qui est réservée pour l'ordinateur. 279 00:12:38,800 --> 00:12:40,130 Nous n'avons pas le droit d'y toucher. 280 00:12:40,130 --> 00:12:44,680 >> Ainsi, lorsque votre programme est l'exécution, si quelque chose essaie d'aller à la mémoire 281 00:12:44,680 --> 00:12:48,990 l'adresse 0, on sait que c'est une valeur vide. 282 00:12:48,990 --> 00:12:50,820 Il ne sait rien devrait être là. 283 00:12:50,820 --> 00:12:53,420 Donc, si vous essayez d'utiliser quelque chose et de traiter quelque chose comme il ou 284 00:12:53,420 --> 00:12:58,355 essayer d'aller à cet endroit, vous êtes allez obtenir une erreur de segmentation ou une erreur. 285 00:12:58,355 --> 00:13:00,520 Est-ce que cela répond à votre question? 286 00:13:00,520 --> 00:13:03,170 >> Et maintenant, nous allons revenir à Stack Overflow. 287 00:13:03,170 --> 00:13:09,560 Choses dans la pile, comme vous les gars ont vu avant, en - tirons un proche 288 00:13:09,560 --> 00:13:11,966 en place d'un cadre de pile. 289 00:13:11,966 --> 00:13:15,050 Tout le monde peut voir que? 290 00:13:15,050 --> 00:13:16,650 Donc, nous avons notre cadre de pile. 291 00:13:16,650 --> 00:13:23,260 Nous économisons un tableau en tant que locale variable dans cette fonction. 292 00:13:23,260 --> 00:13:29,510 Donc, dire que notre réseau dispose de cinq points. 293 00:13:29,510 --> 00:13:33,230 Les cinq personnes seront stockées dans ce laps de pile. 294 00:13:33,230 --> 00:13:37,540 >> Si nous commençons à écrire au-delà de la limites de ce tableau - 295 00:13:37,540 --> 00:13:43,990 si nous commençons à écrire dans, disons que c'est 0. 296 00:13:43,990 --> 00:13:46,800 Ce sont les cinq indices de notre réseau. 297 00:13:46,800 --> 00:13:50,980 Si nous commençons à écrire dans l'index 5, qui nous n'avons pas quand nous avons une 298 00:13:50,980 --> 00:13:55,900 tableau de taille 5, nous commençons à écrire dans index 6, 7, 8, 9, nous pouvons obtenir une pile 299 00:13:55,900 --> 00:13:57,960 Erreur de débordement. 300 00:13:57,960 --> 00:14:00,510 >> En général, il n'est pas - 301 00:14:00,510 --> 00:14:04,910 vous aurez probablement des ennuis si vous dépassez par un. 302 00:14:04,910 --> 00:14:08,640 Mais en général, vous obtiendrez dans le plus de problèmes si vous dépassez par un grand nombre 303 00:14:08,640 --> 00:14:12,770 et vous allez jusqu'à plus que vous écrivez sur l'adresse de ce retour 304 00:14:12,770 --> 00:14:16,080 fonction, qui est situé à l' bas de la trame de pile. 305 00:14:16,080 --> 00:14:16,520 >> Parce que, à droite? 306 00:14:16,520 --> 00:14:17,670 Vous - en - désolé. 307 00:14:17,670 --> 00:14:18,550 Pas "parce que le droit." 308 00:14:18,550 --> 00:14:20,470 >> Dans le cadre de pile, vous avez vos variables locales. 309 00:14:20,470 --> 00:14:27,090 Tout en bas de la pile cadre est l'adresse de retour. 310 00:14:27,090 --> 00:14:28,790 C'est là que la fonction va quand c'est fini. 311 00:14:28,790 --> 00:14:33,750 Et si vous le remplacez que le retour adresse, puis quand ce frame de pile, 312 00:14:33,750 --> 00:14:36,680 quand vous allez à travers la pile cadrer et de l'exécution de chaque ligne, vous êtes 313 00:14:36,680 --> 00:14:40,350 passer à votre nouvelle adresse de retour que c'est écrit à la place de la 314 00:14:40,350 --> 00:14:40,910 réel sur un. 315 00:14:40,910 --> 00:14:45,050 Et c'est ainsi que nous avons vu certaines failles de sécurité 316 00:14:45,050 --> 00:14:46,780 peut se produire avec les ordinateurs. 317 00:14:46,780 --> 00:14:52,760 >> Débordement Donc pile, en bref, est quand vous remplacez la pièce de la pile 318 00:14:52,760 --> 00:14:55,440 vous êtes censé utiliser, local variable que vous êtes censé utiliser, et 319 00:14:55,440 --> 00:14:58,070 en particulier lorsque vous commencez à écraser choses importantes comme la 320 00:14:58,070 --> 00:14:59,100 l'adresse de retour. 321 00:14:59,100 --> 00:15:00,090 Et c'est là que vous obtiendrez une erreur. 322 00:15:00,090 --> 00:15:03,980 Ou peut-être même vous pourriez commencer même écrit dans - 323 00:15:03,980 --> 00:15:05,370 dire la recherche binaire était juste au-dessus principale. 324 00:15:05,370 --> 00:15:07,790 Si vous avez écrasé un lot, vous pouvait écrire en principal. 325 00:15:07,790 --> 00:15:10,230 Mais en général, vous obtenez une erreur avant puis, parce que l'ordinateur sait 326 00:15:10,230 --> 00:15:12,270 vous faites quelque chose que vous ne doit pas faire. 327 00:15:12,270 --> 00:15:12,560 Ouais. 328 00:15:12,560 --> 00:15:13,910 >> ETUDIANT: Quelle est la différence entre un débordement de pile 329 00:15:13,910 --> 00:15:16,940 et un débordement de tampon? 330 00:15:16,940 --> 00:15:19,420 >> JASON HIRSCHHORN: débordement de tampon est un type plus générique de 331 00:15:19,420 --> 00:15:20,395 ce que je viens de décrire. 332 00:15:20,395 --> 00:15:22,610 >> ETUDIANT: un débordement de pile est donc un exemple d'un dépassement de mémoire tampon. 333 00:15:22,610 --> 00:15:23,420 >> JASON HIRSCHHORN: Exactement. 334 00:15:23,420 --> 00:15:28,700 C'est un tableau que nous pouvons considérer comme une tampon, un espace pour que les choses aillent po 335 00:15:28,700 --> 00:15:30,600 Il s'agit d'un débordement de mémoire tampon. 336 00:15:30,600 --> 00:15:33,210 Nous pourrions avoir un débordement de la mémoire tampon. 337 00:15:33,210 --> 00:15:36,870 S'il y avait une mémoire tampon, qui y souvent est un tableau le tas, et nous 338 00:15:36,870 --> 00:15:40,600 écrasait ces limites, alors nous serions un débordement de la mémoire tampon. 339 00:15:40,600 --> 00:15:44,870 >> Et au-delà de la portée de ce cours, ils ont détecté un peu différemment. 340 00:15:44,870 --> 00:15:48,040 Le compilateur a spécial des moyens de détection de chacune d'elles. 341 00:15:48,040 --> 00:15:50,660 Mais un débordement de tampon est un plus générique type de ce que j'ai décrit, 342 00:15:50,660 --> 00:15:54,090 qui était un débordement de mémoire tampon. 343 00:15:54,090 --> 00:15:56,240 Ai-je répondu à votre question? 344 00:15:56,240 --> 00:15:57,910 Sweet. 345 00:15:57,910 --> 00:16:01,850 >> Y avait-il d'autres questions connexes à la pile ou le tas? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Ouais. 348 00:16:05,510 --> 00:16:08,220 >> Étudiant: Je sais que vous avez à cordes libres parce qu'ils sont dans le tas 349 00:16:08,220 --> 00:16:09,305 et vous ne voulez pas perdre la mémoire. 350 00:16:09,305 --> 00:16:12,240 Mais avez-vous de libérer les variables globales et des choses comme ça? 351 00:16:12,240 --> 00:16:14,335 Ou sont-ils libérés automatiquement? 352 00:16:14,335 --> 00:16:15,700 >> JASON HIRSCHHORN: Bonne question. 353 00:16:15,700 --> 00:16:22,340 Ainsi, dans CS50.H, nous créons cette chose pour que vous avez appelé une chaîne. 354 00:16:22,340 --> 00:16:23,800 Une chaîne est vraiment ce que? 355 00:16:23,800 --> 00:16:24,810 >> ETUDIANT: Char étoiles. 356 00:16:24,810 --> 00:16:29,180 >> JASON HIRSCHHORN: Une étoile de char, un pointeur à un caractère, un pointeur vers 357 00:16:29,180 --> 00:16:30,650 un tableau de caractères. 358 00:16:30,650 --> 00:16:32,210 C'est ce que la chaîne est. 359 00:16:32,210 --> 00:16:36,050 Donc, nous devons libérer, parce que GetString, qui nous avons beaucoup utilisé - 360 00:16:36,050 --> 00:16:38,370 nom de la chaîne est égale à GetString - 361 00:16:38,370 --> 00:16:43,560 que mallocs pour nous un peu de mémoire sur la tas, puis renvoie un pointeur sur le 362 00:16:43,560 --> 00:16:47,230 le premier caractère de cette chaîne, une étoile char. 363 00:16:47,230 --> 00:16:52,760 >> Donc, apparemment, si vous n'avez pas été écriture libre sur vos chaînes 364 00:16:52,760 --> 00:16:55,600 que vous avez appelé jusqu'ici, vous avez été une fuite de la mémoire. 365 00:16:55,600 --> 00:16:57,430 Bien sûr, nous n'avons pas parlé , donc personne est obtenu en 366 00:16:57,430 --> 00:16:58,520 la difficulté pour le faire. 367 00:16:58,520 --> 00:16:59,980 Mais à l'avenir, oui. 368 00:16:59,980 --> 00:17:03,990 Lorsque vous appelez GetString, vous êtes allouer de l'espace sur le tas. 369 00:17:03,990 --> 00:17:07,640 Et si vous n'appelez pas libre plus tard que chaîne, vous avez une fuite de mémoire. 370 00:17:07,640 --> 00:17:09,440 Cela répond à votre question? 371 00:17:09,440 --> 00:17:10,606 >> Oui 372 00:17:10,606 --> 00:17:15,020 >> Étudiant: Donc, pour ce faire, utilisons-nous libre juste avant le retour? 373 00:17:15,020 --> 00:17:18,510 Comme, dans le cadre de, je suppose que si nous disons, comme, int principale, dans le 374 00:17:18,510 --> 00:17:24,410 portée du code qui est dans les accolades, juste avant - 375 00:17:24,410 --> 00:17:26,140 vous savez où vous feriez généralement mis retour. 376 00:17:26,140 --> 00:17:27,950 Mettez-vous gratuitement avant? 377 00:17:27,950 --> 00:17:31,000 >> JASON HIRSCHHORN: Donc, vous pouvez mettre gratuitement partout où vous voulez mettre gratuitement. 378 00:17:31,000 --> 00:17:33,810 Parce que ce sont alloués dynamiquement des variables, car ils peuvent 379 00:17:33,810 --> 00:17:39,170 vivre au-delà de la portée d'un particulier fonction, si vous appelez malloc dans un 380 00:17:39,170 --> 00:17:44,140 fonction distincte, par exemple, GetString, vous pouvez appeler gratuitement en principal. 381 00:17:44,140 --> 00:17:46,050 Vous n'avez pas besoin de l'appeler dans la fonction spécifique 382 00:17:46,050 --> 00:17:47,570 où malloc est appelé. 383 00:17:47,570 --> 00:17:50,340 Mais vous n'avez pas besoin de l'appeler avant principal revient. 384 00:17:50,340 --> 00:17:51,120 >> Et cela dépend vraiment. 385 00:17:51,120 --> 00:17:54,960 Cela dépend de la raison pour laquelle vous malloced que espace en premier lieu. 386 00:17:54,960 --> 00:17:57,320 Certaines personnes vont appeler libérer assez rapidement. 387 00:17:57,320 --> 00:17:59,220 Certaines personnes ne seront pas appeler gratuitement jusqu'à la fin de leur programme. 388 00:17:59,220 --> 00:18:00,660 Et ils passent par et tout est gratuit. 389 00:18:00,660 --> 00:18:03,597 Cela dépend de la raison pour laquelle vous avez appelé malloc. 390 00:18:03,597 --> 00:18:11,270 >> Étudiant: Et que diriez-vous si vous appeliez utilisation GetString? 391 00:18:11,270 --> 00:18:13,320 Vous diriez sans quoi? 392 00:18:13,320 --> 00:18:20,040 >> JASON HIRSCHHORN: Donc, la syntaxe gratuitement est tout simplement libre, parenthèse ouverte, à proximité 393 00:18:20,040 --> 00:18:22,130 paren, et le nom du pointeur. 394 00:18:22,130 --> 00:18:26,410 Donc, si vous écrivez le nom cordes égaux GetString, vous mettez le nom ici. 395 00:18:26,410 --> 00:18:27,760 C'est le nom du pointeur. 396 00:18:27,760 --> 00:18:30,570 Et il sait de libérer la mémoire. 397 00:18:30,570 --> 00:18:33,920 >> Étudiant: Alors, quand il libère cette mémoire, le pointeur pointe toujours à cet endroit 398 00:18:33,920 --> 00:18:34,970 dans la mémoire? 399 00:18:34,970 --> 00:18:39,020 Ou est le pointeur aussi vidé de l'adresse qu'il pointe vers. 400 00:18:39,020 --> 00:18:40,290 >> JASON HIRSCHHORN: Nous devrions essayer. 401 00:18:40,290 --> 00:18:41,430 Nous devrions code. 402 00:18:41,430 --> 00:18:43,880 Revenons quand nous arrivons à codage, et nous allons code. 403 00:18:43,880 --> 00:18:46,000 Et si vous voulez trouver la réponse pour cela, vous pouvez également le code qui 404 00:18:46,000 --> 00:18:46,690 dans l'intervalle. 405 00:18:46,690 --> 00:18:49,100 Mais c'est une grande question. 406 00:18:49,100 --> 00:18:53,480 >> ETUDIANT: Est-il possible de quelque chose de gratuit trop tôt? 407 00:18:53,480 --> 00:18:58,530 Donc, vous avez encore besoin pour votre programme, et vous avez libéré cet espace mémoire? 408 00:18:58,530 --> 00:18:59,200 >> JASON HIRSCHHORN: Oui. 409 00:18:59,200 --> 00:19:03,020 Il est possible, si vous quelque chose de gratuit puis vous utilisez à nouveau, vous allez 410 00:19:03,020 --> 00:19:06,890 courir dans une erreur. 411 00:19:06,890 --> 00:19:10,810 Mais c'est sur vous, parce que vous avez libéré quelque chose et puis a appelé plus tard. 412 00:19:10,810 --> 00:19:13,940 C'était donc l'erreur d'un programmeur. 413 00:19:13,940 --> 00:19:14,780 Mais oui. 414 00:19:14,780 --> 00:19:17,760 Vous pouvez écrire cela. 415 00:19:17,760 --> 00:19:19,240 >> D'autres questions sur - 416 00:19:19,240 --> 00:19:19,760 Oui. 417 00:19:19,760 --> 00:19:22,820 >> Étudiant: Donc, si vous êtes censé juste libérer en général avant l' 418 00:19:22,820 --> 00:19:25,490 programme se termine, ce que cela signifie si l' programme se termine et vous n'avez pas la libérer, 419 00:19:25,490 --> 00:19:27,580 que la mémoire est encore alloué? 420 00:19:27,580 --> 00:19:31,330 >> JASON HIRSCHHORN: Si votre programme se termine et vous oubliez de libérer quelque chose, alors 421 00:19:31,330 --> 00:19:34,390 que la mémoire a été répartie dans la durée de vie de votre programme. 422 00:19:34,390 --> 00:19:37,670 Lorsque votre programme se ferme complètement, que la mémoire ne va pas 423 00:19:37,670 --> 00:19:39,490 y rester pour toujours. 424 00:19:39,490 --> 00:19:42,080 L'ordinateur est assez intelligent pour savoir que, lorsque le programme se ferme, il 425 00:19:42,080 --> 00:19:46,440 devrait se débarrasser de toute la mémoire que a été associée à ce programme. 426 00:19:46,440 --> 00:19:51,240 >> Cependant, il existe des outils que vous pouvez exécuter sur un programme pour détecter si, lorsque le 427 00:19:51,240 --> 00:19:54,720 programme terminé, vous avez oublié pour libérer de la mémoire. 428 00:19:54,720 --> 00:19:57,960 Et pour votre prochain problème posé où vous allez utiliser malloc et l'utilisation 429 00:19:57,960 --> 00:20:02,610 pointeurs, vous exécuter ce programmer sur votre programme pour voir si, 430 00:20:02,610 --> 00:20:06,530 où les principaux retours, vous aviez quelque les choses qui ont été laissés unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Donc, ils ne vont pas rester malloced toujours dans votre ordinateur. 432 00:20:09,130 --> 00:20:11,720 Ce serait inutile, car très vite, les ordinateurs 433 00:20:11,720 --> 00:20:12,960 serait à court de mémoire. 434 00:20:12,960 --> 00:20:16,450 Mais si ils courent jusqu'à la fin de votre programmer et ils ne sont pas libérés et votre 435 00:20:16,450 --> 00:20:20,260 programme se termine, c'est toujours un problème que cet outil vous aidera à répondre. 436 00:20:20,260 --> 00:20:21,520 >> ETUDIANT: Est-ce que Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON HIRSCHHORN: C'est appelé Valgrind. 438 00:20:22,910 --> 00:20:23,520 Et vous serez - 439 00:20:23,520 --> 00:20:25,780 >> Étudiant: Mais nous n'avons pas à connaître que pour le quiz, si? 440 00:20:25,780 --> 00:20:27,600 Je veux dire, on en a parlé un peu en cours. 441 00:20:27,600 --> 00:20:33,600 >> JASON HIRSCHHORN: Donc Valgrind est le nom de cet outil. 442 00:20:33,600 --> 00:20:37,180 Sachant ce qu'il fait est assez pour le quiz. 443 00:20:37,180 --> 00:20:40,200 Mais vous n'avez pas encore utilisé votre problème posé parce que nous n'avons pas eu un 444 00:20:40,200 --> 00:20:43,520 ensemble de problème qui a explicitement traitées avec malloc ou vous avec malloc. 445 00:20:43,520 --> 00:20:45,330 Donc, vous n'avez pas encore utilisé Valgrind. 446 00:20:45,330 --> 00:20:47,760 Mais vous allez l'utiliser plus tôt plutôt que plus tard. 447 00:20:47,760 --> 00:20:48,710 >> ETUDIANT: Pouvez-vous répéter ce Valgrind est? 448 00:20:48,710 --> 00:20:49,190 >> JASON HIRSCHHORN: Désolé? 449 00:20:49,190 --> 00:20:51,240 >> ETUDIANT: Pouvez-vous répéter ce que le but de Valgring est? 450 00:20:51,240 --> 00:20:53,100 >> JASON HIRSCHHORN: Valgrind est le nom - 451 00:20:53,100 --> 00:20:59,890 comme GDB vous aide à déboguer votre programme, Valgrind vous aide à déterminer si 452 00:20:59,890 --> 00:21:03,210 les choses n'ont pas été libérés lorsque votre programme se ferme. 453 00:21:03,210 --> 00:21:05,110 Donc, vous allez rencontrer sur votre programme. 454 00:21:05,110 --> 00:21:09,230 Et votre programme se termine, et il dira votre programme appelé malloc ce nombre 455 00:21:09,230 --> 00:21:13,670 fois pour ce nombre d'octets, et vous seulement appelés gratuit à de nombreuses reprises. 456 00:21:13,670 --> 00:21:16,520 Et si vous avez quitté ces nombreux octets sans être libéré. 457 00:21:16,520 --> 00:21:18,050 Ou il va dire que vous avez tout libéré. 458 00:21:18,050 --> 00:21:19,070 Bon travail. 459 00:21:19,070 --> 00:21:19,480 >> ETUDIANT: OK. 460 00:21:19,480 --> 00:21:21,060 Et ça s'appelle Valgring? 461 00:21:21,060 --> 00:21:24,940 >> Jason HIRSCHHORN: V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> ETUDIANT: Une question sur les pointeurs. 463 00:21:25,970 --> 00:21:30,080 Donc, dire que vous avez n étoile x est égal à quelque chose. 464 00:21:30,080 --> 00:21:33,330 Cela équivaut, tout ce que vous mettez là, c'est que ce qui a été mis à l'intérieur 465 00:21:33,330 --> 00:21:36,120 ce x pointe vers, ou le pointeur de x? 466 00:21:36,120 --> 00:21:37,690 >> JASON HIRSCHHORN: Pouvez-vous répéter la question? 467 00:21:37,690 --> 00:21:39,340 Pouvons-nous tirer pendant que vous le dites? 468 00:21:39,340 --> 00:21:42,710 >> ETUDIANT: Dans le questionnaire, en fait, le celui que vous nous avez envoyé, c'était comme, char 469 00:21:42,710 --> 00:21:46,520 vérité étoiles est égal roches CS50, non? 470 00:21:46,520 --> 00:21:52,190 Donc, cela veut dire que ce que les roches CS50 est ce que la vérité est orientée vers? 471 00:21:52,190 --> 00:21:55,810 >> JASON HIRSCHHORN: Donc vous parlez sur une étoile de caractère dans une chaîne, comment 472 00:21:55,810 --> 00:21:56,460 cela fonctionne? 473 00:21:56,460 --> 00:21:56,890 Ouais. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Tirons ceci ici. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE CONVERSATION] 477 00:22:07,100 --> 00:22:11,130 >> JASON HIRSCHHORN: Donc, cette variable va être de type char étoiles. 478 00:22:11,130 --> 00:22:14,580 Quelle est la taille d'une variable de type char étoiles? 479 00:22:14,580 --> 00:22:15,510 Combien d'octets? 480 00:22:15,510 --> 00:22:16,450 >> ÉTUDIANTS: Quatre. 481 00:22:16,450 --> 00:22:18,210 >> JASON HIRSCHHORN: C'est quatre octets. 482 00:22:18,210 --> 00:22:21,420 Combien l'homme est une variable de type int étoiles? 483 00:22:21,420 --> 00:22:22,210 >> ÉTUDIANTS: Quatre. 484 00:22:22,210 --> 00:22:24,910 >> JASON HIRSCHHORN: Quatre octets. 485 00:22:24,910 --> 00:22:28,280 Si c'est un pointeur, il est toujours quatre octets, parce que les pointeurs, leur 486 00:22:28,280 --> 00:22:30,070 valeur est une adresse mémoire. 487 00:22:30,070 --> 00:22:35,160 Et adresses de mémoire sur la CS50 appareil sont quatre octets de long. 488 00:22:35,160 --> 00:22:42,900 Ainsi, lorsque nous appelons GetString, ou lorsque nous par exemple, Nomchaîne égale, puis en 489 00:22:42,900 --> 00:22:46,140 guillemets mis une chaîne, nous mettons - 490 00:22:46,140 --> 00:22:46,920 eh bien, c'est un peu différent. 491 00:22:46,920 --> 00:22:48,630 Nous ne GETSTRING comme exemple. 492 00:22:48,630 --> 00:22:52,150 Ou quelque chose de char étoiles est égale à la chaîne. 493 00:22:52,150 --> 00:22:54,360 Désolé, donnez-moi l'exemple que vous avez lu? 494 00:22:54,360 --> 00:22:57,590 >> ÉTUDIANT: char vérité étoiles est égal "roches CS50" entre guillemets. 495 00:22:57,590 --> 00:23:02,260 >> JASON HIRSCHHORN: Donc, cette étoile, ce nous appelons cette variable x pour notre 496 00:23:02,260 --> 00:23:04,060 fins génériques. 497 00:23:04,060 --> 00:23:05,970 Nous avons créé une variable appelée x. 498 00:23:05,970 --> 00:23:07,610 C'est type char étoiles. 499 00:23:07,610 --> 00:23:10,950 Il s'agit d'un pointeur vers une série de caractères. 500 00:23:10,950 --> 00:23:12,200 Donc ici - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Donc, c'est comment ce serait travailler dans la mémoire. 503 00:23:25,890 --> 00:23:27,410 Cela stocker une adresse mémoire. 504 00:23:27,410 --> 00:23:31,770 Il serait stocker l'adresse de la mémoire de le premier caractère dans la matrice. 505 00:23:31,770 --> 00:23:33,830 Et puis, quand vous avez suivi le pointeur, vous le feriez 506 00:23:33,830 --> 00:23:35,200 obtenir le premier caractère. 507 00:23:35,200 --> 00:23:38,780 >> Et si vous lisez cette chose comme une chaîne, votre ordinateur est intelligent 508 00:23:38,780 --> 00:23:42,930 assez pour savoir, lisez tout cela jusqu'à ce qu'il arrive à un jeu 0. 509 00:23:42,930 --> 00:23:45,530 Mais si vous lisez un caractère à un temps, afin que vous nous parcourons 510 00:23:45,530 --> 00:23:49,910 cette chaîne, alors vous venez de lire un caractère à la fois jusqu'à ce que vous arrivez à 511 00:23:49,910 --> 00:23:50,850 barre oblique inverse 0. 512 00:23:50,850 --> 00:23:52,335 Cela pourrait ne pas répondre à votre question, cependant. 513 00:23:52,335 --> 00:23:55,610 >> ÉTUDIANT: Oui, mais vous n'avez pas malloced que l'espace 514 00:23:55,610 --> 00:23:58,400 encore pour que pointeur. 515 00:23:58,400 --> 00:24:02,510 >> JASON HIRSCHHORN: Je ne suis pas sûr exactement ce que vous cherchez à, 516 00:24:02,510 --> 00:24:03,640 parce que je n'ai pas fait que quiz. 517 00:24:03,640 --> 00:24:06,370 Cela devait être un utile ressources d'un autre TF. 518 00:24:06,370 --> 00:24:11,380 Si vous créez une chaîne sur la empiler ou comme une variable locale, ça va 519 00:24:11,380 --> 00:24:16,920 juste être ensemble de charges plutôt que généralement une étoile char montrant 520 00:24:16,920 --> 00:24:18,600 une autre chaîne. 521 00:24:18,600 --> 00:24:20,550 Mais je ne sais pas. 522 00:24:20,550 --> 00:24:25,065 Cela pourrait être un pointeur vers un autre chaîne sur la pile ainsi. 523 00:24:25,065 --> 00:24:27,240 Ouais. 524 00:24:27,240 --> 00:24:31,116 >> Étudiant: Je sais que vous devez allouer de la mémoire si le pointeur est 525 00:24:31,116 --> 00:24:33,360 se déclare à l'intérieur d'une autre fonction. 526 00:24:33,360 --> 00:24:36,740 Avez-vous besoin de faire la même chose si c'est être déclarée à l'intérieur de principal, 527 00:24:36,740 --> 00:24:39,570 vous l'utilisez à l'intérieur de principal? 528 00:24:39,570 --> 00:24:43,590 >> JASON HIRSCHHORN: Alors oui. 529 00:24:43,590 --> 00:24:46,670 Vous pouvez déclarer un pointeur vers une adresse de mémoire dans la mémoire. 530 00:24:46,670 --> 00:24:51,440 Il peut s'agir de l'adresse de la mémoire d'une locale variables, bien souvent, 531 00:24:51,440 --> 00:24:55,760 les gens ne déclarent pas les adresses de mémoire aux variables locales, car ils vont 532 00:24:55,760 --> 00:24:59,890 loin une fois que la fonction retourne, qui C'est pourquoi nous malloc généralement des choses. 533 00:24:59,890 --> 00:25:04,630 Mais oui, vous pouvez déclarer un pointeur à une autre variable locale. 534 00:25:04,630 --> 00:25:06,360 C'est juste généralement pas fait. 535 00:25:06,360 --> 00:25:09,480 Mais je peux jeter un oeil à ce que chose de spécifique après la classe. 536 00:25:09,480 --> 00:25:10,650 Ouais. 537 00:25:10,650 --> 00:25:12,350 >> Étudiant: Je pense que c'est une sorte de ce qui est demandé. 538 00:25:12,350 --> 00:25:16,930 Il semble étrange à l'initialisation un pointeur non pas comme un 539 00:25:16,930 --> 00:25:20,760 adresse, mais comme ce semble être une valeur. 540 00:25:20,760 --> 00:25:25,970 Il semble que le CS50 est ce qui est à l'intérieur la chose qui est fait pour et 541 00:25:25,970 --> 00:25:28,820 pas l'adresse réelle, non? 542 00:25:28,820 --> 00:25:30,520 >> JASON HIRSCHHORN: C'est pas le cas, cependant. 543 00:25:30,520 --> 00:25:32,470 Ce n'est pas ce qui se passe. 544 00:25:32,470 --> 00:25:35,910 Lorsque vous déclarez une étoile de char, c'est une adresse mémoire. 545 00:25:35,910 --> 00:25:38,860 Les pointeurs sont toutes les adresses de la mémoire pointant vers quelque chose d'autre. 546 00:25:38,860 --> 00:25:41,480 Que quelque chose pourrait être sur le pile, mais il est presque toujours sur la 547 00:25:41,480 --> 00:25:43,440 entasser dans la façon dont nous allons le voir utilisé. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Mais Nomchaîne égale guillemet "GETSTRING," nous pouvons voir que nous 550 00:25:53,500 --> 00:25:55,010 peut voir à travers cela et que coder. 551 00:25:55,010 --> 00:26:01,190 chaîne GETSTRING n'est pas enregistré dans cette variable, ou quelle que soit la chaîne 552 00:26:01,190 --> 00:26:04,580 nom n'est pas enregistré dans ce variables, car ce n'est pas la façon dont 553 00:26:04,580 --> 00:26:06,070 pointeurs fonctionnent. 554 00:26:06,070 --> 00:26:06,770 Cela fait-il sens? 555 00:26:06,770 --> 00:26:07,170 >> ÉTUDIANT: Oui. 556 00:26:07,170 --> 00:26:08,570 >> JASON HIRSCHHORN: OK. 557 00:26:08,570 --> 00:26:11,690 Heureusement, ce n'était pas source de confusion pour tout le monde. 558 00:26:11,690 --> 00:26:15,732 Mais si c'était, nous pouvons regarder à nouveau un peu, parce que nous allons en fait 559 00:26:15,732 --> 00:26:19,240 de coder quelque chose qui, nous l'espérons travaillez avec des cordes et aider à vous sentir 560 00:26:19,240 --> 00:26:22,170 plus à l'aise avec eux. 561 00:26:22,170 --> 00:26:24,869 >> Toutes les autres questions liées à ces sujets ou d'autres sujets qui 562 00:26:24,869 --> 00:26:26,119 Je remets en place? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Et - 565 00:26:34,840 --> 00:26:36,310 en ce moment. 566 00:26:36,310 --> 00:26:37,630 Oui, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Donc, c'est complètement différent, mais pouvons-nous aller un peu plus 568 00:26:39,860 --> 00:26:42,760 très rapidement ce que nous devons savoir sur la différence entre un 32 et 569 00:26:42,760 --> 00:26:46,345 Ordinateur 64 bits? 570 00:26:46,345 --> 00:26:47,740 >> JASON HIRSCHHORN: Oui. 571 00:26:47,740 --> 00:26:52,111 Donc 32 bits est le nombre d'octets? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: C'est quatre octets. 573 00:26:53,060 --> 00:26:54,360 >> JASON HIRSCHHORN: C'est quatre octets. 574 00:26:54,360 --> 00:26:58,420 Et 64 bits est le nombre d'octets? 575 00:26:58,420 --> 00:26:59,112 >> ETUDIANT: Huit. 576 00:26:59,112 --> 00:27:00,610 >> JASON HIRSCHHORN: Huit octets. 577 00:27:00,610 --> 00:27:03,980 Encore une fois, huit bits est un octet. 578 00:27:03,980 --> 00:27:08,340 Votre appareil est CS50 une machine de 32 bits. 579 00:27:08,340 --> 00:27:13,650 Ainsi, les adresses de mémoire sont quatre octets de long. 580 00:27:13,650 --> 00:27:17,460 Il ya 2 au 32 des adresses de mémoire. 581 00:27:17,460 --> 00:27:21,310 0 à 2 pour le 32 moins 1. 582 00:27:21,310 --> 00:27:27,630 Et je ne suis pas positif, mais c'est probablement la portée de ce que vous devez 583 00:27:27,630 --> 00:27:35,230 savoir pour une machine 32 bits, la mémoire les adresses sont, de plus, quatre octets de long, 584 00:27:35,230 --> 00:27:39,620 et c'est le montant maximum d'adresses de mémoire. 585 00:27:39,620 --> 00:27:41,680 >> En outre, les types de données - 586 00:27:41,680 --> 00:27:45,020 ce pourrait être quelque chose comme bien qu'il vaut la peine de noter. 587 00:27:45,020 --> 00:27:49,610 La taille d'un type de données dépend de la machine vous travaillez avec. 588 00:27:49,610 --> 00:27:56,760 Ainsi, un char, un caractère unique, est de savoir comment le nombre d'octets sur notre appareil de CS50? 589 00:27:56,760 --> 00:27:57,980 Un octet. 590 00:27:57,980 --> 00:28:02,310 Et c'est en fait un octet comme bien sur une machine de 64 bits. 591 00:28:02,310 --> 00:28:05,920 >> Et la plupart des types de données sont le même nombre des octets sur les deux machines. 592 00:28:05,920 --> 00:28:11,620 Mais certains types de données seront différentes sur les deux machines. 593 00:28:11,620 --> 00:28:14,590 Ce serait donc potentiellement la seule chose que vous devez savoir. 594 00:28:14,590 --> 00:28:16,710 >> Mais même cela, je pense, est au-delà des limites - 595 00:28:16,710 --> 00:28:20,990 Je suis presque certain, si vous regardez en arrière de vieilles quiz, dit-il, assumer 596 00:28:20,990 --> 00:28:24,090 problèmes que vous utilisez le codage une machine de 32 bits. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Mais il ya, pour aller avec ce que dans Si vous êtes intéressé, il ya 599 00:28:30,620 --> 00:28:35,920 les types de données qui sont les mêmes taille sur toutes les machines. 600 00:28:35,920 --> 00:28:42,670 >> Si vous avez vu quelque chose comme uint32_t, vous pouvez ou 601 00:28:42,670 --> 00:28:43,260 ne pas avoir vu cela. 602 00:28:43,260 --> 00:28:44,290 C'est un type de données. 603 00:28:44,290 --> 00:28:47,570 Ce n'est pas peu dire, être 32 bits peu importe quelle machine ce n'est sur. 604 00:28:47,570 --> 00:28:50,350 Alors, quand les gens écrivent portable code, ils ne seront probablement pas utiliser ints. 605 00:28:50,350 --> 00:28:53,260 Ils utilisent plutôt ces autres données types qu'ils connaissent seront les mêmes 606 00:28:53,260 --> 00:28:54,780 taille sur chaque machine. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> MADHU: J'avais une question à propos de le processus de compilation. 610 00:29:00,150 --> 00:29:04,110 Donc, si vous écrivez un programme qui utilise une bibliothèque comme CS50 ou quelque chose 611 00:29:04,110 --> 00:29:06,840 comme ça, je sais que cette bibliothèque doit, à un certain point, être 612 00:29:06,840 --> 00:29:08,590 compilé et lié po 613 00:29:08,590 --> 00:29:13,380 Mais combien de ce qui se passe pendant la compilation de votre programme? 614 00:29:13,380 --> 00:29:15,880 Quelle partie de ce processus de bibliothèque se produit lorsque vous êtes 615 00:29:15,880 --> 00:29:18,560 compilation de votre propre programme? 616 00:29:18,560 --> 00:29:24,020 >> JASON HIRSCHHORN: Donc, nous allons passer en en général, les étapes de ce procédé. 617 00:29:24,020 --> 00:29:26,280 Vous écrivez votre fichier c.. 618 00:29:26,280 --> 00:29:33,530 Dans votre fichier de c., Vous incluez votre # bibliothèques d'en-tête, par exemple, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Qu'est-ce que forte comprennent ligne faire à votre programme? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> Akchar: Il ajoute les prototypes de les fonctions de l'en-tête 622 00:29:43,350 --> 00:29:45,120 fichiers dans les bibliothèques. 623 00:29:45,120 --> 00:29:45,600 >> JASON HIRSCHHORN: Exactement. 624 00:29:45,600 --> 00:29:49,870 Il ajoute ces prototypes de fonctions à votre code. 625 00:29:49,870 --> 00:29:55,230 Ainsi, lorsque votre code est compilé dans les premiers stades, le compilateur sait 626 00:29:55,230 --> 00:29:59,250 que ces fonctions existent réellement, et que quelque part, ils ont été définis. 627 00:29:59,250 --> 00:30:02,460 Les fichiers. H ne comprennent pas la définitions de ces fonctions ou comment 628 00:30:02,460 --> 00:30:03,950 elles travaillent effectivement. 629 00:30:03,950 --> 00:30:07,960 Cs50.h comprend juste quelque chose qui dit GetString est une chose réelle que 630 00:30:07,960 --> 00:30:09,270 peut arriver. 631 00:30:09,270 --> 00:30:14,240 Et standardio.h dit printf est une véritable chose qui puisse arriver. 632 00:30:14,240 --> 00:30:23,190 >> Donc, votre langue de c avec cela. Tête fichier est transformé en un certain 633 00:30:23,190 --> 00:30:27,750 un code lisible par machine, qui par la suite obtient transformé en binaire 634 00:30:27,750 --> 00:30:30,030 code, de 0 et de 1. 635 00:30:30,030 --> 00:30:33,590 Et c'est le code qui en fin de compte est exécuté. 636 00:30:33,590 --> 00:30:38,550 -L ligne CS50 - par exemple, lorsque vous Clang écrit - 637 00:30:38,550 --> 00:30:41,830 puis vous incluez-l CS50, que vous tapez po 638 00:30:41,830 --> 00:30:42,180 Et vous voyez que. 639 00:30:42,180 --> 00:30:43,890 Lorsque vous écrivez faire, vous aurez voir cette ligne ici. 640 00:30:43,890 --> 00:30:47,740 Et nous verrons que, dans un deuxième quand nous codons ou plus tard, quand nous le code. 641 00:30:47,740 --> 00:30:50,390 >> Mais que-l ligne CS50 fait quelque chose un peu différente de celle 642 00:30:50,390 --> 00:30:52,440 les # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Qu'est-ce que la ligne-l CS50 faire? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Je veux dire que c'est Liens la bibliothèque à la fonction 646 00:31:00,310 --> 00:31:02,710 appeler, comme les joints fichiers.. 647 00:31:02,710 --> 00:31:08,200 >> JASON HIRSCHHORN: donc très près, sinon spot-on. 648 00:31:08,200 --> 00:31:16,220 -L CS50 prend le fichier binaire et fusionne avec le fichier binaire. 649 00:31:16,220 --> 00:31:21,410 Donc cs50.h, il ne sert à rien tournant cs50.h de langage C en binaire chaque 650 00:31:21,410 --> 00:31:23,130 temps seul il est utilisé. 651 00:31:23,130 --> 00:31:26,650 Ce serait idiot, parce que serait perdre beaucoup de temps. 652 00:31:26,650 --> 00:31:30,420 Ainsi, il a déjà été établi et transformé en un exécutable. 653 00:31:30,420 --> 00:31:35,430 Et maintenant, il va être fusionné avec votre fichier à la fin. 654 00:31:35,430 --> 00:31:38,370 Donc, ces 1 et de 0 vont à fusionner avec vos proches 655 00:31:38,370 --> 00:31:39,150 et de 0 à la fin. 656 00:31:39,150 --> 00:31:43,670 Alors maintenant, vous allez vraiment vous avez la réelle 1 et de 0 qui définissent la façon dont GetString, 657 00:31:43,670 --> 00:31:47,890 par exemple, fonctionne, ou comment printf, par exemple, fonctionne. 658 00:31:47,890 --> 00:31:52,750 >> Et pour plus d'informations, il ya un compilateurs courtes que Nate donne que 659 00:31:52,750 --> 00:31:55,410 vous devriez vérifier ce qui va à travers ces étapes. 660 00:31:55,410 --> 00:31:56,050 Mais - 661 00:31:56,050 --> 00:31:56,560 Oui. 662 00:31:56,560 --> 00:32:01,700 >> ETUDIANT: fichiers o Sont-ils toujours en. quand ils sont sous la forme de bibliothèque, 663 00:32:01,700 --> 00:32:06,764 prêt à être fusionné, lié - comme ils sont dans le code binaire? 664 00:32:06,764 --> 00:32:07,600 >> JASON HIRSCHHORN: OK. 665 00:32:07,600 --> 00:32:08,420 Qu'est - 666 00:32:08,420 --> 00:32:11,780 >> ÉTUDIANT: Est-ce toujours le cas pour les bibliothèques quand vous leur lien? 667 00:32:11,780 --> 00:32:12,500 >> JASON HIRSCHHORN: Oui. 668 00:32:12,500 --> 00:32:17,300 Donc, il ya. S fichiers, qui seront code machine, qui sera également 669 00:32:17,300 --> 00:32:17,975 cryptique pour vous. 670 00:32:17,975 --> 00:32:19,410 Vous n'avez pas besoin de s'inquiéter à propos de ceux-ci. 671 00:32:19,410 --> 00:32:24,930 Mais en général, oui, ils vont être. o fichiers prêts à aller. 672 00:32:24,930 --> 00:32:27,170 >> Étudiant: Donc lorsque vous expédiez à une bibliothèque, vous ne transportons seulement 673 00:32:27,170 --> 00:32:28,880 l'. h et le. o? 674 00:32:28,880 --> 00:32:32,210 Vous n'avez pas expédier le. C ou le. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON HIRSCHHORN: Donc - 676 00:32:33,070 --> 00:32:36,260 et c'est dans ce court ainsi, si cette information semble venir d'un 677 00:32:36,260 --> 00:32:36,700 peu vite. 678 00:32:36,700 --> 00:32:39,870 Mais sur le court compilateurs parle de cela aussi. 679 00:32:39,870 --> 00:32:43,290 Lorsque vous expédiez une bibliothèque, si vous expédiez l'. h, le fichier d'en-tête, les 680 00:32:43,290 --> 00:32:46,290 prototypes de fonction, et le 1 de et 0 de, c'est tout ce que vous devez donner. 681 00:32:46,290 --> 00:32:50,640 Vous n'avez pas besoin de donner la façon dont le fonction fonctionne, le fichier c.. 682 00:32:50,640 --> 00:32:56,360 Parce que l'abstraction, ou le signaler API, le point à ce SPL, 683 00:32:56,360 --> 00:32:59,650 la bibliothèque portable de Stanford, il est pour vous de ne pas vous soucier de comment les nouvelles 684 00:32:59,650 --> 00:33:04,220 GRect fonctionne, ou comment passer des œuvres, ou comment ajouter des œuvres. 685 00:33:04,220 --> 00:33:06,520 Tout ce que vous devez savoir, c'est que complément est une fonction que vous pouvez 686 00:33:06,520 --> 00:33:08,880 utiliser, et il le fait. 687 00:33:08,880 --> 00:33:12,760 Donc, vous n'avez pas vraiment besoin de savoir comment il est écrit en C. Vous avez juste besoin d' 688 00:33:12,760 --> 00:33:15,460 savoir, voici les fonctions, ce qu'ils faire, et voici les de 1 et de 0 689 00:33:15,460 --> 00:33:18,870 quand vous voulez vraiment les utiliser. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 D'autres questions sur les compilateurs ou d'autres sujets sur la carte? 692 00:33:26,980 --> 00:33:30,300 >> ETUDIANT: J'ai une question de la mise en œuvre des fonctions récursives. 693 00:33:30,300 --> 00:33:31,170 Une question sur la récursivité. 694 00:33:31,170 --> 00:33:33,030 J'ai eu le sentiment que pourrait se poser. 695 00:33:33,030 --> 00:33:38,310 Allons donc rapidement récursion avec un spécifique 696 00:33:38,310 --> 00:33:40,690 exemple, une fonction factorielle. 697 00:33:40,690 --> 00:33:44,920 Parce que c'est un exemple qui revient souvent ou est utilisé 698 00:33:44,920 --> 00:33:46,170 pour illustrer la récursion. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Ainsi, "4"! est lu comme 4 factorielle. 701 00:33:56,410 --> 00:33:59,120 Et qu'est-ce que 4 factorielle signifie? 702 00:33:59,120 --> 00:34:00,696 Qu'est-ce que faire? 703 00:34:00,696 --> 00:34:02,235 Comment calculez-vous 4 factorielle? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 fois 3 fois 2 fois 1. 706 00:34:07,960 --> 00:34:11,889 >> Donc, une autre façon d'écrire 4 factorielle est d'écrire cela. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 fois 3 factoriel. 709 00:34:19,022 --> 00:34:22,080 Parce que 3 factorielle est 3 fois 2 fois 1. 710 00:34:22,080 --> 00:34:27,580 Soit 4 fois 3 factoriel est 4 fois 3 fois 2 fois 1. 711 00:34:27,580 --> 00:34:32,679 C'est pourquoi factorielle est une grande candidat à la récursivité, parce que c'est 712 00:34:32,679 --> 00:34:36,630 clair qu'il ya quelque chose qui arrive encore et encore et encore sur un 713 00:34:36,630 --> 00:34:39,820 plus petit nombre de choses jusqu'à ce que vous atteignez la fin. 714 00:34:39,820 --> 00:34:42,570 Lorsque vous arrivez à 1, 1 factorielle est 1. 715 00:34:42,570 --> 00:34:43,719 Vous ne pouvez pas aller plus loin. 716 00:34:43,719 --> 00:34:47,219 0 factorielle est également définie comme 1. 717 00:34:47,219 --> 00:34:50,679 Donc, quand vous arrivez à 1 ou 0, vous êtes à la fin, et vous pouvez 718 00:34:50,679 --> 00:34:53,219 commencer à aller vers le haut. 719 00:34:53,219 --> 00:34:59,540 Donc, si nous voulions écrire un récursive fonction pour calculer une factorielle, 720 00:34:59,540 --> 00:35:02,170 nous allons écrire un peu pseudo pour ça maintenant. 721 00:35:02,170 --> 00:35:03,300 Avant nous écrivons que pseudo - 722 00:35:03,300 --> 00:35:05,660 Je vais vous donner les gars quelques minutes pour écrire le code de pseudo ou il suffit de penser 723 00:35:05,660 --> 00:35:09,600 à ce sujet - il ya deux choses tous fonction récursive a besoin. 724 00:35:09,600 --> 00:35:12,530 Quels sont ces deux choses? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Il doit se dire. 726 00:35:13,220 --> 00:35:13,680 >> JASON HIRSCHHORN: Noé? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Allez-y. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Il doit se dire. 730 00:35:16,640 --> 00:35:19,220 >> JASON HIRSCHHORN: Donc un récursive fonction a besoin d'un appel récursif, un 731 00:35:19,220 --> 00:35:20,220 appeler à lui-même. 732 00:35:20,220 --> 00:35:20,770 C'est un. 733 00:35:20,770 --> 00:35:21,510 Et ce qui est l'autre chose? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Un cas de base. 735 00:35:22,250 --> 00:35:23,780 >> JASON HIRSCHHORN: Un cas de base. 736 00:35:23,780 --> 00:35:26,940 Un scénario de référence est, ici c'est quand nous nous arrêtons. 737 00:35:26,940 --> 00:35:29,510 Donc, votre fonction est appelée. 738 00:35:29,510 --> 00:35:31,410 Le cas de base vient en premier. 739 00:35:31,410 --> 00:35:33,710 Vous voulez savoir si vous êtes à la fin. 740 00:35:33,710 --> 00:35:37,110 Et si vous n'êtes pas à la fin, vous faire de votre appel récursif. 741 00:35:37,110 --> 00:35:39,880 Et vous passez par cette fonction de nouveau, vérifiez votre hypothèse de base. 742 00:35:39,880 --> 00:35:42,575 Si vous n'êtes pas la fin, vous faites un autre appel récursif, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> C'est pourquoi les fonctions récursives toujours besoin de ces cas de base et ceux 745 00:35:47,110 --> 00:35:48,210 appels récursifs. 746 00:35:48,210 --> 00:35:51,280 Si vous n'avez pas un appel récursif, il ne serait pas une fonction récursive. 747 00:35:51,280 --> 00:35:53,210 Si vous n'avez pas un cas de base, vous aller toujours et 748 00:35:53,210 --> 00:35:54,780 il n'y aurait pas de fin. 749 00:35:54,780 --> 00:35:57,870 Et le cas de base vient toujours en premier, parce que vous aurez toujours envie de vérifier 750 00:35:57,870 --> 00:36:00,420 si vous êtes à la première extrémité. 751 00:36:00,420 --> 00:36:04,770 Donc, avant de faire un peu de pseudo, pourquoi prenez-vous pas une minute pour réfléchir à 752 00:36:04,770 --> 00:36:09,360 comment une fonction factorielle récursive serait écrit? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Aussi, autant que vous le faites, l'écriture -le sur une feuille de papier est 755 00:36:26,010 --> 00:36:27,960 ce que vous allez avoir à faire sur le quiz demain. 756 00:36:27,960 --> 00:36:32,160 Donc probablement une bonne pratique de faire que le code que vous écrivez 757 00:36:32,160 --> 00:36:34,420 bas sur la feuille de papier - 758 00:36:34,420 --> 00:36:35,160 ou vous pouvez le faire. 759 00:36:35,160 --> 00:36:36,710 Vous savez où sont les points-virgules. 760 00:36:36,710 --> 00:36:37,660 Vous vous souvenez de la syntaxe. 761 00:36:37,660 --> 00:36:40,400 Parce que vous n'êtes pas en mesure d'avoir une compilateur dire que vous avez fait une erreur. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> En outre, le long de ces lignes, demain, quand vous avez des problèmes de codage, si vous 764 00:37:07,240 --> 00:37:11,490 sont pressés par le temps, ou si vous êtes très confus quant à la façon dont vous êtes censé 765 00:37:11,490 --> 00:37:16,030 écrire la chose particulière dans c, il serait vous incombera d'écrire pseudo-code 766 00:37:16,030 --> 00:37:18,160 ou écrire des commentaires en tant que bien. 767 00:37:18,160 --> 00:37:21,940 Parce qu'il ya un crédit partiel pour un beaucoup de questions sur le questionnaire. 768 00:37:21,940 --> 00:37:24,840 Donc, vous pourriez être pressé, ou que vous pourrait bien être confondu. 769 00:37:24,840 --> 00:37:28,030 Écrit dans les commentaires ou pseudo-code sont souvent des moyens que vous 770 00:37:28,030 --> 00:37:29,360 peuvent obtenir un crédit partiel. 771 00:37:29,360 --> 00:37:31,440 >> Donc, ne pas laisser quelque chose blanc sur le questionnaire. 772 00:37:31,440 --> 00:37:33,490 Il n'y a pas de sanctions pour mettre les choses po 773 00:37:33,490 --> 00:37:37,650 En fait, la mise en pseudo-code ou commentaires va aider la niveleuse 774 00:37:37,650 --> 00:37:40,410 déterminer si vous savez vraiment ce vous parlez, et peut-être d'attribution 775 00:37:40,410 --> 00:37:42,030 vous un peu de crédit partiel pour cela. 776 00:37:42,030 --> 00:37:44,510 >> Aussi le long de ces lignes, écrire clairement. 777 00:37:44,510 --> 00:37:47,650 Si nous ne pouvons pas vraiment ce que vous écrivez, nous n'allons pas vous appeler 778 00:37:47,650 --> 00:37:49,900 à minuit demain à la figure ce que vous avez écrit. 779 00:37:49,900 --> 00:37:51,520 Nous allons juste à décoller points. 780 00:37:51,520 --> 00:37:56,570 Ecrivez clairement que nous puissions entendre, ou plutôt, nous pouvons lire ce que vous avez écrit. 781 00:37:56,570 --> 00:38:00,230 >> Et si elle dit deux phrases, ne pas écrire un paragraphe. 782 00:38:00,230 --> 00:38:02,280 Suivez les instructions. 783 00:38:02,280 --> 00:38:03,500 Écrire clairement. 784 00:38:03,500 --> 00:38:07,720 Et écrire dans ces commentaires ou pseudocode pour les questions qui pourraient 785 00:38:07,720 --> 00:38:10,270 crédit partiel de prix. 786 00:38:10,270 --> 00:38:12,520 >> OK, allons-y pour factorielle. 787 00:38:12,520 --> 00:38:15,000 Nous avons donc une fonction factorielle. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Si je devais réellement écrire cela en C, qu'est-ce que je dois mettre avant le nom 790 00:38:21,550 --> 00:38:22,800 de la fonction? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Le type de retour, ce qui, dans ce cas, nous allons lui donner int. 793 00:38:30,060 --> 00:38:35,450 Et puis à l'intérieur des accolades, est ce qui se passe à l'intérieur des accolades pour 794 00:38:35,450 --> 00:38:36,850 une fonction? 795 00:38:36,850 --> 00:38:37,950 >> ÉTUDIANTS: Type d'argument. 796 00:38:37,950 --> 00:38:39,150 >> JASON HIRSCHHORN: Ses arguments. 797 00:38:39,150 --> 00:38:42,680 Donc factorielle sera probablement prendre un argument. 798 00:38:42,680 --> 00:38:44,500 Il va probablement prendre un argument. 799 00:38:44,500 --> 00:38:49,450 Et nous disons qu'il va prendre un nombre entier appelé x. 800 00:38:49,450 --> 00:38:52,770 Et encore une fois, lors de l'écriture du prototype de une fonction ou d'écrire la fonction 801 00:38:52,770 --> 00:38:57,110 dans votre code avant de la définir, vous écrire le type de données et le nom d' 802 00:38:57,110 --> 00:39:01,370 cette variable pour cette fonction seulement. 803 00:39:01,370 --> 00:39:06,350 Ainsi, vous pouvez passer un certain nombre dans ce fonction, il sera appelé x 804 00:39:06,350 --> 00:39:07,340 en interne. 805 00:39:07,340 --> 00:39:08,755 >> Nous avons notre fonction factorielle. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Nous avons besoin de deux choses, un cas de base et un appel récursif. 808 00:39:15,850 --> 00:39:20,900 Quel est le scénario de base pour factorielle? 809 00:39:20,900 --> 00:39:24,850 Quelqu'un qui l'a écrit sur et qui n'a pas encore parlé, ce qui est la base 810 00:39:24,850 --> 00:39:26,100 cas pour factorielle? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> ETUDIANT: Si n est inférieur de 2, retour 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON HIRSCHHORN: Si n est moins de 2, retour 1. 814 00:39:33,520 --> 00:39:37,216 J'aime que, parce que prend soin de 0 et 1. 815 00:39:37,216 --> 00:39:45,290 Nous ferons donc x <2, retour 1. 816 00:39:45,290 --> 00:39:47,870 Si nous sommes passés 0, si nous obtenons passé 1, cette fonction sera 817 00:39:47,870 --> 00:39:49,790 retourner immédiatement 1. 818 00:39:49,790 --> 00:39:54,020 Si nous sommes passés un certain nombre supérieur ou égale à 2, nous allons 819 00:39:54,020 --> 00:39:55,370 avoir notre appel récursif. 820 00:39:55,370 --> 00:39:57,855 >> Et comment est-ce que cela va fonctionner? 821 00:39:57,855 --> 00:40:01,070 Can quelqu'un d'autre qui a travaillé sur ce qui n'a pas encore parlé de me donner l' 822 00:40:01,070 --> 00:40:07,380 appel récursif pour cette fonction en pseudo-code? 823 00:40:07,380 --> 00:40:10,770 Si nous sommes passés à un nombre x et il est supérieur à 2, ce qui 824 00:40:10,770 --> 00:40:13,370 voulons-nous faire? 825 00:40:13,370 --> 00:40:17,930 Nous avons également un exemple écrit sur le côté qui pourrait vous donner un indice. 826 00:40:17,930 --> 00:40:20,770 >> ETUDIANT: Appelez x fois la factorielle de x moins 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON HIRSCHHORN: Exactement. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Nous allons revenir x fois la factorielle de x moins 1. 830 00:40:37,750 --> 00:40:41,810 Et que, même si j'ai écrit, Fondamentalement, ce que vous avez dit en anglais, 831 00:40:41,810 --> 00:40:44,580 cette fonction factorielle sera appelée à nouveau. 832 00:40:44,580 --> 00:40:46,320 Il va exécuter sur x moins 1. 833 00:40:46,320 --> 00:40:49,320 Il va revenir avec un entier, et alors il va multiplier ces deux 834 00:40:49,320 --> 00:40:52,050 en même temps, et cette valeur sera retourné à quelque appelé cette 835 00:40:52,050 --> 00:40:55,010 fonction factorielle, qui pourrait un autre exemple d' 836 00:40:55,010 --> 00:40:58,420 cette fonction factorielle. 837 00:40:58,420 --> 00:41:01,360 >> C'est donc un exemple d'un récursive fonction, une très 838 00:41:01,360 --> 00:41:02,530 fonction récursive simple. 839 00:41:02,530 --> 00:41:04,530 Mais la plupart d'entre eux seront comme ça. 840 00:41:04,530 --> 00:41:11,170 Si vous voulez un bon récursive un défi pour le quiz, essayez de codage 841 00:41:11,170 --> 00:41:13,230 recherche binaire récursive. 842 00:41:13,230 --> 00:41:18,950 Parce que si vous avez fait une recherche binaire pour problème réglé trois, vous avez sans doute l'avez fait 843 00:41:18,950 --> 00:41:21,730 de manière itérative dans une boucle while. 844 00:41:21,730 --> 00:41:23,700 >> Mais elle peut aussi s'écrire de manière récursive. 845 00:41:23,700 --> 00:41:26,310 Vous allez avoir besoin d'écrire votre propre fonction distincte qui prend un certain 846 00:41:26,310 --> 00:41:29,020 différents arguments de ligne de commande - ou et non des arguments de ligne de commande, un certain 847 00:41:29,020 --> 00:41:30,910 différents arguments juste réguliers. 848 00:41:30,910 --> 00:41:33,870 Mais vous pouvez écrire recherche binaire récursive ainsi. 849 00:41:33,870 --> 00:41:36,190 >> Étudiant: Donc, vous auriez pu également écrit, à la place de x moins 1, vous 850 00:41:36,190 --> 00:41:39,502 aurait également écrit x moins moins, ou vous pourriez avoir 851 00:41:39,502 --> 00:41:40,830 écrite minus minus x. 852 00:41:40,830 --> 00:41:44,740 Pouvez-vous nous expliquer très rapidement pourquoi ceux qui seraient des choses différentes, 853 00:41:44,740 --> 00:41:49,510 comme quelle est la différence entre x moins moins moins moins et x? 854 00:41:49,510 --> 00:41:51,320 >> JASON HIRSCHHORN: Non, je ne suis pas va aller là-dedans. 855 00:41:51,320 --> 00:41:55,500 Mais je vais vous parler après classe. x moins en moins, moins, moins x 856 00:41:55,500 --> 00:41:57,780 décrémenter x par 1. 857 00:41:57,780 --> 00:41:59,090 Mais ils le font un peu différemment. 858 00:41:59,090 --> 00:42:00,340 Mais je ne veux pas entrer dans cela. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 D'autres questions sur la récursivité ou cette fonction? 861 00:42:09,090 --> 00:42:10,140 Ce n'est pas vraiment même pseudo. 862 00:42:10,140 --> 00:42:15,060 C'est essentiellement le code C Vous souhaitez écrire pour cela. 863 00:42:15,060 --> 00:42:19,393 >> OK, d'autres questions sur des sujets ici? 864 00:42:19,393 --> 00:42:19,864 Ouais. 865 00:42:19,864 --> 00:42:23,130 >> ÉTUDIANT: J'ai un rapide aperçu des le point et virgule flottante. 866 00:42:23,130 --> 00:42:24,260 >> JASON HIRSCHHORN: Flottant le point et de précision. 867 00:42:24,260 --> 00:42:26,920 Quelqu'un peut très vite me donner un aperçu de 868 00:42:26,920 --> 00:42:28,210 virgule flottante et précision? 869 00:42:28,210 --> 00:42:30,420 Vous avez tous eu à faire pour votre problème réglé, si vous êtes tous 870 00:42:30,420 --> 00:42:31,700 familier avec elle. 871 00:42:31,700 --> 00:42:35,090 Ou peut-être pas tous. 872 00:42:35,090 --> 00:42:36,602 N'importe qui? 873 00:42:36,602 --> 00:42:39,530 Donnez-moi un point de commencer. 874 00:42:39,530 --> 00:42:40,750 Virgule flottante et précision. 875 00:42:40,750 --> 00:42:42,380 Quel est le problème? 876 00:42:42,380 --> 00:42:42,960 Oui. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON HIRSCHHORN: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Désolé. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Il n'y a qu'un nombre fini des nombres qui peuvent être représentés 882 00:42:51,550 --> 00:42:57,930 parce que vous êtes sur un, dans notre cas, un système 32 bits. 883 00:42:57,930 --> 00:43:03,080 Donc, vous avez à type de faire quelques numéros. 884 00:43:03,080 --> 00:43:03,910 >> JASON HIRSCHHORN: C'est tout à fait exact. 885 00:43:03,910 --> 00:43:08,110 Il existe seulement une certaine quantité d' nombres qui peuvent être représentés. 886 00:43:08,110 --> 00:43:11,770 Si vous multipliez deux très grands nombres, il pourrait déborder de la quantité 887 00:43:11,770 --> 00:43:13,950 d'espaces que vous devez représenter un nombre entier. 888 00:43:13,950 --> 00:43:17,930 C'est pourquoi parfois nous utilisons un long long au lieu d'un int. 889 00:43:17,930 --> 00:43:19,210 Cela a plus de places. 890 00:43:19,210 --> 00:43:21,210 Qui peut contenir un plus grand nombre. 891 00:43:21,210 --> 00:43:24,310 >> Précision en virgule flottante a à voir avec que, mais a aussi à voir avec la 892 00:43:24,310 --> 00:43:29,300 fait que les nombres décimaux sont pas toujours représenté. 893 00:43:29,300 --> 00:43:29,540 Désolé. 894 00:43:29,540 --> 00:43:31,280 Permettez-moi de cette sauvegarde. 895 00:43:31,280 --> 00:43:36,610 Le nombre décimal 1.0 n'est pas toujours représentée comme on peut s'y attendre, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Il est parfois représenté comme 1,000000001 0,999999999 ou. 898 00:43:50,360 --> 00:43:52,780 Il pourrait même être jeté 89 quelque part. 899 00:43:52,780 --> 00:43:56,560 Donc, ces nombres décimaux ne sont pas représenté exactement comme vous le feriez 900 00:43:56,560 --> 00:43:58,430 s'attendent à ce qu'ils soient représentés. 901 00:43:58,430 --> 00:44:00,010 >> Donc problème posé - 902 00:44:00,010 --> 00:44:00,860 était-ce deux? - 903 00:44:00,860 --> 00:44:05,290 problème réglé deux, où nous avons traité nombres à virgule flottante, lorsque nous voulions 904 00:44:05,290 --> 00:44:08,690 qu'ils représentent exactement ce que nous voulions qu'ils représentent, le nombre 905 00:44:08,690 --> 00:44:12,860 de pièces de monnaie, ou le nombre de cents, nous les multiplions par 100. 906 00:44:12,860 --> 00:44:14,750 Nous leur avons arrondi. 907 00:44:14,750 --> 00:44:18,660 Et puis nous avons coupé tout derrière la virgule. 908 00:44:18,660 --> 00:44:22,020 C'était pour s'assurer qu'ils seraient effectivement égale exactement ce que nous voulions 909 00:44:22,020 --> 00:44:22,410 qu'ils sont égaux. 910 00:44:22,410 --> 00:44:26,870 >> Parce que quand vous prenez quelque chose qui est un flotteur et la transformer en un int, vous 911 00:44:26,870 --> 00:44:29,860 couper tout à droite de la virgule. 912 00:44:29,860 --> 00:44:33,900 Parce qu'il ya un certain point flottant imprécision, 100.000 peut-être 913 00:44:33,900 --> 00:44:37,440 représentée comme 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Et si vous venez de couper tout à le droit de suite, vous allez 915 00:44:40,350 --> 00:44:41,600 obtenir le mauvais numéro. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Ouais. 918 00:44:44,180 --> 00:44:45,290 >> ETUDIANT: j'ai eu une question sur la coulée. 919 00:44:45,290 --> 00:44:47,500 Dans quel ordre faut-il se produire en? 920 00:44:47,500 --> 00:44:54,480 Si vous souhaitez faire flotter, entre parenthèses, 1 divisé par 10, ça ne 1 divisé par 10, 921 00:44:54,480 --> 00:44:58,910 puis obtenir 0,1, puis tournez dans un flotteur? 922 00:44:58,910 --> 00:45:01,470 >> JASON HIRSCHHORN: Si vous faites flotter 1 divisé par 10 - 923 00:45:01,470 --> 00:45:02,550 >> ETUDIANT: Ouais, et alors égaux - 924 00:45:02,550 --> 00:45:04,240 ainsi, il serait normalement faire égal à - 925 00:45:04,240 --> 00:45:04,690 Ouais. 926 00:45:04,690 --> 00:45:06,760 Vous voulez faire un flotteur, non? 927 00:45:06,760 --> 00:45:12,790 >> JASON HIRSCHHORN: OK, nous allons l'utiliser pour enchaîner en déterminer 928 00:45:12,790 --> 00:45:15,390 les réponses à ces questions par codage. 929 00:45:15,390 --> 00:45:18,180 Parce que vous aurez probablement beaucoup de ces questions de minutes, et une bonne façon 930 00:45:18,180 --> 00:45:19,100 de les résoudre à travers le codage. 931 00:45:19,100 --> 00:45:21,320 Nous allons donc à coder ce droit maintenant, et puis nous allons revenir en arrière et 932 00:45:21,320 --> 00:45:24,020 coder la question que vous aviez. 933 00:45:24,020 --> 00:45:24,950 >> Ainsi, la première ligne - 934 00:45:24,950 --> 00:45:29,390 Je n'aurais pas écrit il - ce qui est la première chose que nous voulons faire quand nous 935 00:45:29,390 --> 00:45:32,250 ouvrir un nouveau fichier dans gedit? 936 00:45:32,250 --> 00:45:34,190 >> ETUDIANT: Inclure. 937 00:45:34,190 --> 00:45:35,920 >> JASON HIRSCHHORN: Inclure quoi? 938 00:45:35,920 --> 00:45:37,952 >> ETUDIANT: bibliothèque CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON HIRSCHHORN: OK. 940 00:45:39,920 --> 00:45:42,590 Que devrions-nous comprendre? 941 00:45:42,590 --> 00:45:46,820 Nous allons juste pour vérifier ce qui se passe quand vous lancez quelque chose à un flotteur. 942 00:45:46,820 --> 00:45:48,605 Mais que devons-nous inclure si nous sommes allez écrire un programme C? 943 00:45:48,605 --> 00:45:49,300 >> ETUDIANT: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON HIRSCHHORN: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Nous n'avons pas réellement besoin, pour cette programme, cs50.h, même si c'est 946 00:45:54,880 --> 00:45:55,920 toujours utile de l'inclure. 947 00:45:55,920 --> 00:45:58,260 Mais nous n'avons pas toujours besoin stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> ETUDIANT: Lors du codage en C? 949 00:45:59,660 --> 00:46:15,770 >> JASON HIRSCHHORN: Lors du codage en C 950 00:46:15,770 --> 00:46:17,090 >> Donc je l'enregistrer comme fichier de c.. 951 00:46:17,090 --> 00:46:18,590 Je reçois quelques belles coloration syntaxique. 952 00:46:18,590 --> 00:46:22,890 J'ai écrit vide à l'intérieur principale. 953 00:46:22,890 --> 00:46:24,792 Qu'est-ce que signifie vide? 954 00:46:24,792 --> 00:46:26,740 >> ETUDIANT: Ne pas prendre de arguments de ligne de commande. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: moyen néant, dans ce cas, le principal ne prend pas 956 00:46:28,900 --> 00:46:29,700 arguments de ligne de commande. 957 00:46:29,700 --> 00:46:32,720 Dans d'autres cas, cela signifie que la fonction ne prend pas d'arguments de ligne de commande. 958 00:46:32,720 --> 00:46:36,560 Ou la fonction, si je devais écrire vide main (void), que diraient principales de 959 00:46:36,560 --> 00:46:38,460 ne pas retourner quoi que ce soit. 960 00:46:38,460 --> 00:46:39,960 Donc nul signifie simplement rien. 961 00:46:39,960 --> 00:46:42,510 Qu'est-ce que j'écris si je devais prendre des arguments de ligne de commande? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> ETUDIANT: int arc c arc de chaîne c 964 00:46:47,150 --> 00:46:49,055 >> JASON HIRSCHHORN: int argc chaîne argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 N'est-ce pas? 967 00:46:55,572 --> 00:46:58,720 >> ETUDIANT: C'est carac supports de argv étoiles. 968 00:46:58,720 --> 00:47:01,730 >> JASON HIRSCHHORN: Donc, vous pourriez écrire supports chaîne de argv ou argv char étoiles 969 00:47:01,730 --> 00:47:03,710 entre parenthèses, mais vous devez les parenthèses. 970 00:47:03,710 --> 00:47:06,290 Parce que argv est un tableau de chaînes, se souvenir. 971 00:47:06,290 --> 00:47:07,360 Ce n'est pas seulement une chaîne. 972 00:47:07,360 --> 00:47:10,350 Alors chaîne argv est, ici est une chaîne appelée argv. 973 00:47:10,350 --> 00:47:13,630 Supports String argv est, voici un tableau de chaînes. 974 00:47:13,630 --> 00:47:17,865 Alors int argc parenthèses chaîne de argv serait quelque chose que je 975 00:47:17,865 --> 00:47:18,810 probablement écrire. 976 00:47:18,810 --> 00:47:23,050 >> Donc, vous vouliez sauver dans un entier? 977 00:47:23,050 --> 00:47:24,285 >> ETUDIANT: Ouais, entier. 978 00:47:24,285 --> 00:47:25,840 Ou dans un flotteur. 979 00:47:25,840 --> 00:47:26,710 >> JASON HIRSCHHORN: Dans un flotteur? 980 00:47:26,710 --> 00:47:30,790 Comme, float x est égal à 1 divisé par 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON HIRSCHHORN: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Comment puis-je imprimer un flotteur dans printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Qu'est-ce? 986 00:47:46,714 --> 00:47:47,560 >> ETUDIANT:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON HIRSCHHORN:% f. 988 00:47:48,300 --> 00:47:50,810 Qu'est-ce qu'un nombre entier? 989 00:47:50,810 --> 00:47:52,110 d ou i. 990 00:47:52,110 --> 00:47:53,000 Qu'est-ce que c'est une chaîne? 991 00:47:53,000 --> 00:47:54,240 >> ÉTUDIANT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON HIRSCHHORN: s. 993 00:47:56,140 --> 00:47:57,550 Comment puis-je obtenir une nouvelle ligne? 994 00:47:57,550 --> 00:47:58,800 >> ETUDIANT: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON HIRSCHHORN: Qu'est-ce que je reviens si les principales pistes correctement? 997 00:48:07,100 --> 00:48:08,360 >> ETUDIANT: 0. 998 00:48:08,360 --> 00:48:09,430 Ai-je besoin d'écrire cette ligne, si? 999 00:48:09,430 --> 00:48:10,170 >> ÉTUDIANT: Non 1000 00:48:10,170 --> 00:48:11,513 OK, nous ne serons pas écrire, alors. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Tout le monde peut lire? 1003 00:48:17,190 --> 00:48:18,485 Il ressemble un peu petit. 1004 00:48:18,485 --> 00:48:20,160 Tout le monde peut voir, ou devrait Je me fais plus? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Je pense que pour l'appareil photo, nous allons faire un peu plus grand, cependant. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON HIRSCHHORN: Si je veux faire de cette . C déposer dans un fichier exécutable, ce qui 1009 00:48:38,410 --> 00:48:39,260 dois-je écrire? 1010 00:48:39,260 --> 00:48:41,610 >> ÉTUDIANTS: Faire test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON HIRSCHHORN: Désolé? 1012 00:48:42,080 --> 00:48:42,790 >> ÉTUDIANTS: Faire test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON HIRSCHHORN: Assurez-test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Nous parlions cette ligne plus tôt. 1016 00:48:48,410 --> 00:48:49,140 Clang. 1017 00:48:49,140 --> 00:48:51,270 Ce qui est bruit? 1018 00:48:51,270 --> 00:48:52,200 Le nom du compilateur. 1019 00:48:52,200 --> 00:48:53,920 Quelle est cette ligne? 1020 00:48:53,920 --> 00:48:55,580 >> ETUDIANT: Définit en place pour l'utilisation de GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Ensembles vers le haut pour l'utilisation de GDB. 1022 00:48:59,230 --> 00:49:02,338 Cette ligne, c'est quoi? 1023 00:49:02,338 --> 00:49:03,290 >> ÉTUDIANTS: Le code source. 1024 00:49:03,290 --> 00:49:06,010 >> JASON HIRSCHHORN: C'est l' fichier source, le fichier c.. 1025 00:49:06,010 --> 00:49:08,150 Qu'est-ce que ces deux lignes font? 1026 00:49:08,150 --> 00:49:10,245 Ou ces deux lignes non. 1027 00:49:10,245 --> 00:49:12,300 >> ETUDIANT: Il nomme test. 1028 00:49:12,300 --> 00:49:15,410 >> JASON HIRSCHHORN: Donc, le tableau de bord o dit, nommer les choses différemment. 1029 00:49:15,410 --> 00:49:16,790 Et ici vous appeler test. 1030 00:49:16,790 --> 00:49:18,900 Si je ne l'ai pas, quel serait-il nommer ce? 1031 00:49:18,900 --> 00:49:20,260 >> ETUDIANT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON HIRSCHHORN: a.out. 1033 00:49:22,340 --> 00:49:25,366 Qu'est-ce que cela fait? 1034 00:49:25,366 --> 00:49:27,670 >> ETUDIANT: Liens à la bibliothèque de mathématiques. 1035 00:49:27,670 --> 00:49:29,550 >> JASON HIRSCHHORN: Il relie dans la bibliothèque de mathématiques. 1036 00:49:29,550 --> 00:49:32,880 Nous n'avons pas inclus la bibliothèque de mathématiques, mais puisque c'est si commun, ils ont 1037 00:49:32,880 --> 00:49:35,780 formule par écrit, à toujours inclure la bibliothèque mathématique. 1038 00:49:35,780 --> 00:49:39,050 Et de même, ce qui inclut la bibliothèque CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, donc si nous énumérons, nous avons maintenant un exécutable appelé test. 1040 00:49:43,010 --> 00:49:45,150 Pour l'exécuter, j'écris test. 1041 00:49:45,150 --> 00:49:48,330 Je vois que mon virgule flottante, comme on s'y attendait, est égal à 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Est-ce que - 1044 00:49:51,590 --> 00:49:52,060 si - 1045 00:49:52,060 --> 00:49:55,210 >> Etudiant: Alors si vous mettez flottez maintenant, comme vous le lancez comme flotteur - 1046 00:49:55,210 --> 00:49:56,870 >> JASON HIRSCHHORN: Cast le 1 à un flotteur? 1047 00:49:56,870 --> 00:49:59,180 >> ETUDIANT: Non, jeter la chose entière - 1048 00:49:59,180 --> 00:49:59,500 ouais. 1049 00:49:59,500 --> 00:50:02,460 Si vous venez de faire cela, serait qui font qu'il est de 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON HIRSCHHORN: OK, donc très rapidement, 1 divisé par 10, ce sont 1051 00:50:07,170 --> 00:50:08,690 entiers étant divisés. 1052 00:50:08,690 --> 00:50:13,580 Ainsi, lorsque vous diviser des nombres entiers, ils sont 0, et vous enregistrez que 0 dans un 1053 00:50:13,580 --> 00:50:17,170 flotter, parce que la barre est juste division entière. 1054 00:50:17,170 --> 00:50:19,180 Alors maintenant, nous nous tournons quelque chose dans un flotteur. 1055 00:50:19,180 --> 00:50:21,650 >> Voyons ce qui se passe. 1056 00:50:21,650 --> 00:50:22,900 Nous ferons test. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Ainsi, nous voyons maintenant que ce n'était pas slash division entière, il flottait 1059 00:50:31,090 --> 00:50:32,640 la division en point. 1060 00:50:32,640 --> 00:50:35,700 Parce que l'un de ses arguments avait été mis à un flotteur. 1061 00:50:35,700 --> 00:50:38,380 Alors maintenant, il a été dit, traiter ce division que nous avons affaire à 1062 00:50:38,380 --> 00:50:40,140 flottants, pas avec des nombres entiers. 1063 00:50:40,140 --> 00:50:42,760 Et si nous obtenons la réponse que nous attendons. 1064 00:50:42,760 --> 00:50:44,620 >> Voyons ce qui se passe - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Si je voulais imprimer plus décimal taches, comment pourrais-je le faire? 1067 00:50:51,646 --> 00:50:55,550 >> ETUDIANT: point point f, ou autant décimales que vous le souhaitez. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON HIRSCHHORN: Donc j'imprime 10 places décimales. 1070 00:51:04,440 --> 00:51:06,610 Et nous voyons maintenant que nous obtenons des trucs bizarres. 1071 00:51:06,610 --> 00:51:09,650 Et cela va revenir à votre question sur virgule flottante imprécision. 1072 00:51:09,650 --> 00:51:10,950 Il ya des trucs bizarres stockée ici. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, est-ce que cela répond à votre question? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Que vouliez-vous pour coder rapidement? 1077 00:51:20,200 --> 00:51:25,470 >> Étudiant: Je voulais juste voir si pas, si vous avez libéré un peu de pointeur, 1078 00:51:25,470 --> 00:51:30,410 si ce pointeur n'avait toujours stocké dans il l'adresse de ce qu'elle avait été 1079 00:51:30,410 --> 00:51:32,170 montrant précédemment. 1080 00:51:32,170 --> 00:51:34,100 >> JASON HIRSCHHORN: OK, nous allons donc le faire. 1081 00:51:34,100 --> 00:51:38,030 Char ptr étoiles, ce qui crée une variable appelé ptr de type char étoiles. 1082 00:51:38,030 --> 00:51:39,280 Comment puis-je écrire malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Juste malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Mais alors, il doit être la taille de, et dans ce cas, je suppose que vous 1087 00:51:51,040 --> 00:51:52,465 être dirigée vers un char. 1088 00:51:52,465 --> 00:51:54,450 Donc, ce serait l'omble. 1089 00:51:54,450 --> 00:51:57,520 >> JASON HIRSCHHORN: OK, donc plus générique, à l'intérieur - 1090 00:51:57,520 --> 00:51:58,770 éditons. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Inside malloc, vous voulez que le numéro des octets sur le tas. 1093 00:52:09,260 --> 00:52:12,320 En général, ce que nous avons vu que nous sommes faire, c'est que nous allons malloc 1094 00:52:12,320 --> 00:52:14,940 des chaînes, par exemple, ou tableaux d'entiers. 1095 00:52:14,940 --> 00:52:21,600 Donc, si nous voulons 10 entiers, ou 10 caractères, 10 nous donnera 10. 1096 00:52:21,600 --> 00:52:24,370 Et puis la taille de caractères donnerait nous que la taille des caractères, qui en 1097 00:52:24,370 --> 00:52:25,120 ce cas est de 1 octet. 1098 00:52:25,120 --> 00:52:26,250 Nous obtenons 10 octets. 1099 00:52:26,250 --> 00:52:28,540 Si nous devions écrire la taille de int, cela nous donnerait 40 octets. 1100 00:52:28,540 --> 00:52:31,520 >> Donc, plus générique, à l'intérieur de malloc est le nombre d'octets que vous voulez. 1101 00:52:31,520 --> 00:52:34,620 Dans ce cas, nous obtenons 1 octet. 1102 00:52:34,620 --> 00:52:36,900 Qui semble être une utilisation étrange de malloc, mais pour notre 1103 00:52:36,900 --> 00:52:38,470 fins du sens. 1104 00:52:38,470 --> 00:52:40,420 Il n'y a donc que. 1105 00:52:40,420 --> 00:52:43,420 >> Nous allons appeler gratuitement. 1106 00:52:43,420 --> 00:52:47,040 Nous nous débarrassons de lui et nous utilisons ptr de nouveau. 1107 00:52:47,040 --> 00:52:48,750 Et qu'est-ce que vous voulez vérifier? 1108 00:52:48,750 --> 00:52:50,550 >> Étudiant: Je voulais juste vérifier si ou pas qu'il y avait quoi que ce soit 1109 00:52:50,550 --> 00:52:51,900 à l'intérieur de celui-ci. 1110 00:52:51,900 --> 00:52:53,050 >> JASON HIRSCHHORN: Donc si il a à quelque chose? 1111 00:52:53,050 --> 00:52:57,740 >> ÉTUDIANT: Oui, exactement, si il y avait encore une adresse mémoire. 1112 00:52:57,740 --> 00:53:02,220 >> JASON HIRSCHHORN: Donc, vous voulez pour vérifier la valeur de ptr? 1113 00:53:02,220 --> 00:53:03,470 >> ÉTUDIANT: Oui, exactement. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON HIRSCHHORN: Qu'est-ce que j'écris ici si je veux vérifier la valeur de la 1116 00:53:10,160 --> 00:53:11,880 le point - ce qui est, la Jordanie dit, la valeur? 1117 00:53:11,880 --> 00:53:13,720 Ou ce qui est stocké à l'intérieur de ptr? 1118 00:53:13,720 --> 00:53:14,620 >> ETUDIANT: Une adresse de mémoire. 1119 00:53:14,620 --> 00:53:16,330 >> JASON HIRSCHHORN: Une adresse de mémoire. 1120 00:53:16,330 --> 00:53:20,520 Donc, si je vous écris tout cela, ça va me donner la valeur de ptr. 1121 00:53:20,520 --> 00:53:22,800 Et comment puis-je imprimer une adresse de mémoire? 1122 00:53:22,800 --> 00:53:26,470 Quelle est la chaîne de format pour une adresse de la mémoire? 1123 00:53:26,470 --> 00:53:27,430 >> ETUDIANT:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON HIRSCHHORN:% p. 1125 00:53:28,050 --> 00:53:29,500 % S est une chaîne. 1126 00:53:29,500 --> 00:53:30,750 % P pour pointeur. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 N'est-ce pas? 1129 00:53:43,540 --> 00:53:44,790 C'est exact. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Donc ptr égal - 1132 00:53:51,040 --> 00:53:53,350 il a encore quelque chose. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 C'est probablement un plus question intéressante. 1135 00:53:57,645 --> 00:53:59,198 Qu'est-ce que cette ligne fait? 1136 00:53:59,198 --> 00:54:00,830 >> ETUDIANT: défauts Seg. 1137 00:54:00,830 --> 00:54:01,310 >> JASON HIRSCHHORN: Quoi? 1138 00:54:01,310 --> 00:54:02,678 >> ÉLÈVE: Je pense que seg défauts. 1139 00:54:02,678 --> 00:54:03,574 >> JASON HIRSCHHORN: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> Etudiant: Je pense que ça va seg faute. 1141 00:54:04,920 --> 00:54:08,265 >> JASON HIRSCHHORN: Donc, cette ligne ptr code, étoiles, ce 1142 00:54:08,265 --> 00:54:10,152 ne l'étoile signifie? 1143 00:54:10,152 --> 00:54:11,240 >> ETUDIANT: Contenu de. 1144 00:54:11,240 --> 00:54:11,560 >> JASON HIRSCHHORN: Ouais. 1145 00:54:11,560 --> 00:54:13,910 Allez pour obtenir le contenu de. 1146 00:54:13,910 --> 00:54:16,830 Donc, cela va aller à la mémoire il répondre et me donner cela. 1147 00:54:16,830 --> 00:54:21,030 J'avais l'habitude% c ici parce qu'il sont des caractères stockés là. 1148 00:54:21,030 --> 00:54:23,390 Donc, nous allons aller à cette adresse que nous juste vu - ou ce sera probablement un 1149 00:54:23,390 --> 00:54:25,190 peu ce différent temps, nous courons le programme. 1150 00:54:25,190 --> 00:54:28,010 Mais nous irons à cette adresse que nous connaissons existe encore 1151 00:54:28,010 --> 00:54:29,260 et voir ce qui est là. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Donc, il n'a pas seg faute. 1154 00:54:37,110 --> 00:54:38,970 Il n'a tout simplement pas nous donner quoi que ce soit. 1155 00:54:38,970 --> 00:54:43,350 Il aurait pu effectivement nous a donné quelque chose, nous ne pouvons tout simplement pas le voir. 1156 00:54:43,350 --> 00:54:45,110 Et cela nous ramène à cette idée - 1157 00:54:45,110 --> 00:54:47,270 et nous n'allons pas trop entrer dans ce, parce que c'est au-delà de la 1158 00:54:47,270 --> 00:54:48,460 cadre de ce cours. 1159 00:54:48,460 --> 00:54:51,260 Mais nous avons parlé ici, si nous est allé au-delà des limites du tableau par 1160 00:54:51,260 --> 00:54:54,890 1, nous ne pourrions pas avoir des ennuis. 1161 00:54:54,890 --> 00:54:58,550 >> Parfois, quand vous allez simplement hors de 1, vous faites quelque chose de mal, et vous 1162 00:54:58,550 --> 00:54:59,220 pourrait avoir des ennuis. 1163 00:54:59,220 --> 00:55:00,820 Mais vous n'avez pas toujours en difficulté. 1164 00:55:00,820 --> 00:55:05,170 Cela dépend de la façon dont beaucoup d'une mauvaise chose que vous ne, vous allez avoir des ennuis. 1165 00:55:05,170 --> 00:55:07,790 Qui ne veut pas dire, être négligé avec votre code. 1166 00:55:07,790 --> 00:55:12,080 Mais il est-à-dire, le programme ne sera pas toujours cesser de fumer, même si vous allez quelque part 1167 00:55:12,080 --> 00:55:14,130 vous n'êtes pas censé aller. 1168 00:55:14,130 --> 00:55:18,170 >> Un bon exemple en est, beaucoup d' personnes dans leur problème défini 3, qui 1169 00:55:18,170 --> 00:55:22,350 a 15, n'ont pas vérifié l' limites de la carte. 1170 00:55:22,350 --> 00:55:25,860 Alors vous avez regardé à gauche, tournés vers la droite, tournés vers le haut, regardé 1171 00:55:25,860 --> 00:55:27,000 vers le bas. 1172 00:55:27,000 --> 00:55:31,540 Mais vous n'avez pas coché pour voir si le haut qui se passait réellement à être sur le plateau. 1173 00:55:31,540 --> 00:55:35,220 Et beaucoup de gens qui ont fait cela et tourné que dans leur programme a 1174 00:55:35,220 --> 00:55:38,960 parfaitement, parce que là où ce conseil était stockée dans la mémoire, si vous êtes allé un 1175 00:55:38,960 --> 00:55:42,300 au-dessus ou vérifié que la mémoire adresse, il n'y avait rien 1176 00:55:42,300 --> 00:55:44,870 particulièrement horrible à ce sujet, de sorte que votre programme n'a pas été 1177 00:55:44,870 --> 00:55:45,970 va te crier dessus. 1178 00:55:45,970 --> 00:55:48,870 >> Mais nous serions encore enlever des points si vous n'avez pas coché, parce que vous 1179 00:55:48,870 --> 00:55:50,850 ont été quelque chose que vous n'étiez pas censé faire, et vous pourriez avoir 1180 00:55:50,850 --> 00:55:51,860 obtenu en difficulté. 1181 00:55:51,860 --> 00:55:54,040 Les chances sont, cependant, vous n'avez probablement pas. 1182 00:55:54,040 --> 00:55:57,790 Donc, c'est pour montrer que, oui, nous pouvons encore y aller. 1183 00:55:57,790 --> 00:55:59,010 Et nous ne sommes pas entrer en difficulté dans ce cas. 1184 00:55:59,010 --> 00:56:04,000 Si nous avons essayé de faire lire le 100 caractères suivants, nous avions 1185 00:56:04,000 --> 00:56:06,000 probablement des ennuis. 1186 00:56:06,000 --> 00:56:09,400 Et vous pouvez coder la lecture de la prochaine 100 caractères si vous voulez en faisant quelques 1187 00:56:09,400 --> 00:56:10,110 sorte de boucle. 1188 00:56:10,110 --> 00:56:10,850 Ouais. 1189 00:56:10,850 --> 00:56:16,250 >> ETUDIANT: Depuis qu'on nous a donnée que espace une valeur réelle, nous ne serions pas 1190 00:56:16,250 --> 00:56:17,050 effectivement être en mesure de voir quoi que ce soit. 1191 00:56:17,050 --> 00:56:21,740 Devrions-nous essayer à la mise que égal à aimer c ou quelque chose? 1192 00:56:21,740 --> 00:56:22,640 >> JASON HIRSCHHORN: Grande question. 1193 00:56:22,640 --> 00:56:25,340 Comment puis-je configurer cette valeur - 1194 00:56:25,340 --> 00:56:28,980 ce ligne de code dois-je écrire en ligne sept à faire ce que vous avez dit? 1195 00:56:28,980 --> 00:56:34,040 >> ÉTUDIANT: Star ptr est égal unique citation c Fin de citation unique. 1196 00:56:34,040 --> 00:56:36,970 >> JASON HIRSCHHORN: C'est la mise un caractère, c, à cet emplacement, 1197 00:56:36,970 --> 00:56:40,200 car encore une fois, cette étoile signifie aller à là. 1198 00:56:40,200 --> 00:56:43,320 Et lorsqu'il est utilisé sur le côté gauche de un opérateur d'affectation, qui est égale à 1199 00:56:43,320 --> 00:56:47,270 signer, nous n'allons pas obtenir que valeur autant que défini cette valeur. 1200 00:56:47,270 --> 00:56:48,520 Voyons maintenant ce qui se passe. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Nous avons quelque chose et il était là. 1203 00:56:56,770 --> 00:56:58,000 Nous avons appelé gratuitement. 1204 00:56:58,000 --> 00:57:00,100 Quelques trucs probablement arrivé sur le tas. 1205 00:57:00,100 --> 00:57:01,890 Donc ce n'est pas plus là. 1206 00:57:01,890 --> 00:57:07,440 Mais encore une fois, nous n'obtenons pas en difficulté pour y aller. 1207 00:57:07,440 --> 00:57:10,260 >> Je fais cela dans le code pour illustrer que beaucoup de ces 1208 00:57:10,260 --> 00:57:12,410 questions que vous avez, ils sont très intéressant 1209 00:57:12,410 --> 00:57:13,650 répond beaucoup de temps. 1210 00:57:13,650 --> 00:57:15,260 Et ils sont vraiment de bonnes questions. 1211 00:57:15,260 --> 00:57:19,010 Et vous pouvez les trouver sur vous-même si, par exemple, 1212 00:57:19,010 --> 00:57:19,990 nous ne sommes pas dans la section. 1213 00:57:19,990 --> 00:57:20,940 Ouais. 1214 00:57:20,940 --> 00:57:24,430 >> ETUDIANT: Parce que vous n'êtes pas l'envoi de la pointeur n'importe où, que vous devez 1215 00:57:24,430 --> 00:57:26,530 utiliser malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON HIRSCHHORN: Donc, cela revient à votre question initiale. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Est-ce juste une variable locale? 1219 00:57:29,980 --> 00:57:32,280 Malloc ici n'est pas que convaincante. 1220 00:57:32,280 --> 00:57:35,260 L'utilisation de malloc ici n'est pas que convaincant, car il est 1221 00:57:35,260 --> 00:57:36,500 seulement une variable locale. 1222 00:57:36,500 --> 00:57:40,970 >> ETUDIANT: Pourriez-vous faire l'omble ptr étoiles équivaut bonjour? 1223 00:57:40,970 --> 00:57:41,400 >> JASON HIRSCHHORN: Oh. 1224 00:57:41,400 --> 00:57:43,300 Donc, nous allons obtenir maintenant de retour à votre question initiale. 1225 00:57:43,300 --> 00:57:46,885 Je pense que vous n'étiez pas satisfait ma réponse. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Comme ça? 1228 00:57:49,226 --> 00:57:49,682 >> ÉTUDIANT: Oui. 1229 00:57:49,682 --> 00:57:50,932 Attendez. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON HIRSCHHORN: Et où voulez-vous imprimer? 1232 00:57:57,850 --> 00:58:00,026 Donc, nous l'imprimerons sur une chaîne comme ça? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> ETUDIANT: Intéressant. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON HIRSCHHORN: Donc, cela dit ce argument est le type de caractère. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Donc, cela devrait être un caractère. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> ETUDIANT: prend juste le premier. 1241 00:58:26,280 --> 00:58:28,610 >> JASON HIRSCHHORN: Donc, ce c'est ce que j'ai dit avant. 1242 00:58:28,610 --> 00:58:34,240 Comme je le disais, ce n'est pas le stockage de la chaîne à l'intérieur variable pointeur. 1243 00:58:34,240 --> 00:58:35,120 Il est le stockage - 1244 00:58:35,120 --> 00:58:36,350 >> ÉTUDIANTS: La première valeur de la chaîne. 1245 00:58:36,350 --> 00:58:40,810 >> JASON HIRSCHHORN: L'adresse de la la première valeur de la chaîne. 1246 00:58:40,810 --> 00:58:46,940 Si nous étions à imprimer, nous sommes obtenir la valeur à l'intérieur pointeur. 1247 00:58:46,940 --> 00:58:51,005 Et nous verrons, il est, en effet, une adresse de mémoire. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Cela fait-il sens? 1250 00:58:56,440 --> 00:58:56,940 Désolé. 1251 00:58:56,940 --> 00:58:58,996 Attendez, est-ce que cela répond à votre question, si? 1252 00:58:58,996 --> 00:58:59,790 >> ÉTUDIANT: Oui. 1253 00:58:59,790 --> 00:59:05,830 >> JASON HIRSCHHORN: Cette ligne de code est la création d'une chaîne et puis un autre 1254 00:59:05,830 --> 00:59:09,115 variable pointeur qui est pointant à cette chaîne, ce tableau. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Ouais. 1257 00:59:14,980 --> 00:59:19,200 >> Étudiant: Donc, si nous sommes allés une mémoire examiner plus avant, pourrions-nous obtenir l'h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 At-il été stockée comme une chaîne? 1260 00:59:23,150 --> 00:59:24,400 >> JASON HIRSCHHORN: Comme, nous l'avons fait - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 donc c'est utile de le faire. 1263 00:59:30,790 --> 00:59:33,780 C'est l'arithmétique, qui vous les gars ont vu avant et devrait être 1264 00:59:33,780 --> 00:59:35,550 relativement à l'aise avec. 1265 00:59:35,550 --> 00:59:36,905 Cela s'apparente à l'écriture - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 si nous devions écrire cette ligne de code, nous avons vu la notation de tableau avant. 1268 00:59:46,350 --> 00:59:55,900 Cela devrait nous donner la deuxième valeur dans ce tableau, h. 1269 00:59:55,900 --> 01:00:05,010 >> Si nous faisions cela, cela devrait également donner nous la deuxième valeur de ce tableau. 1270 01:00:05,010 --> 01:00:08,320 Parce qu'il va pas à la mémoire Adresse de la première chose, mais la 1271 01:00:08,320 --> 01:00:10,530 adresse mémoire de la chose un plus. 1272 01:00:10,530 --> 01:00:14,360 Et puis les déréférences opérateur étoiles ce pointeur. 1273 01:00:14,360 --> 01:00:16,940 Et encore une fois, nous allons voir. 1274 01:00:16,940 --> 01:00:18,664 Nous recevons encore h. 1275 01:00:18,664 --> 01:00:20,980 >> ETUDIANT: Que signifie exactement dereference dire? 1276 01:00:20,980 --> 01:00:23,650 >> JASON HIRSCHHORN: déréférencement est un mot de fantaisie pour aller. 1277 01:00:23,650 --> 01:00:26,390 Aller à cela et obtenir ce qui est là est de déréférencer un pointeur. 1278 01:00:26,390 --> 01:00:28,240 C'est juste un mot de fantaisie pour cela. 1279 01:00:28,240 --> 01:00:29,986 >> ETUDIANT: Si nous voulions imprimer l'ensemble de la chaîne, pourrions-nous 1280 01:00:29,986 --> 01:00:31,930 faire pointeur esperluette? 1281 01:00:31,930 --> 01:00:33,490 >> JASON HIRSCHHORN: OK, nous sommes va faire une pause ici. 1282 01:00:33,490 --> 01:00:35,480 Nous allons terminer ici. 1283 01:00:35,480 --> 01:00:41,760 Ampersand vous donne l'adresse d'un emplacement, ainsi quand vous faites de l'esperluette 1284 01:00:41,760 --> 01:00:44,080 une variable, il vous donne l'adresse où cette variable est stockée. 1285 01:00:44,080 --> 01:00:48,580 Pointeur Ampersand vous la donner adresse de ptr ptr où est en mémoire. 1286 01:00:48,580 --> 01:00:50,140 >> Nous n'allons pas aller sur avec cet exemple. 1287 01:00:50,140 --> 01:00:52,640 Vous pouvez trouver ces choses sur votre propre. 1288 01:00:52,640 --> 01:00:55,740 Mais encore une fois, ce pourrait même être frôle un peu au-delà de ce que vous devez savoir pour 1289 01:00:55,740 --> 01:00:58,000 la portée de la présente à mi-parcours - 1290 01:00:58,000 --> 01:00:59,070 ou ce quiz, plutôt. 1291 01:00:59,070 --> 01:01:00,270 Désolé. 1292 01:01:00,270 --> 01:01:03,770 >> Nous allons passer, parce que je j'aimerais faire un problème de codage 1293 01:01:03,770 --> 01:01:05,100 avant le temps est écoulé. 1294 01:01:05,100 --> 01:01:09,340 Et nous allons coder ce que je pense est le plus convaincant de ces 1295 01:01:09,340 --> 01:01:11,020 exemples, atoi. 1296 01:01:11,020 --> 01:01:14,520 Donc, ce fut une question sur un quiz il ya deux ans. 1297 01:01:14,520 --> 01:01:17,810 Et je l'ai sur la carte ici. 1298 01:01:17,810 --> 01:01:20,680 >> Les gens ont été invités sur le quiz - 1299 01:01:20,680 --> 01:01:23,640 ils ont eu un peu plus dans tesxt la question, mais j'ai éliminé la 1300 01:01:23,640 --> 01:01:26,640 texte, car il n'était pas nécessaire pour nos fins aujourd'hui. 1301 01:01:26,640 --> 01:01:29,180 C'était juste un peu de fond sur ce que atoi fait. 1302 01:01:29,180 --> 01:01:31,425 Mais vous le savez tous et sont très familiariser avec atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Je vous suggère de coder ce sur une feuille de papier. 1304 01:01:35,620 --> 01:01:39,310 Je suggère également que vous utilisez la stratégie que nous avons dépassé 1305 01:01:39,310 --> 01:01:41,040 beaucoup dans notre section. 1306 01:01:41,040 --> 01:01:44,130 Tout d'abord, assurez-vous de bien comprendre ce atoi de faire. 1307 01:01:44,130 --> 01:01:47,580 Dessiner une image ou venir avec une certaine image mentale de celui-ci dans votre tête. 1308 01:01:47,580 --> 01:01:51,120 Ensuite, écrire pseudo pour cela. 1309 01:01:51,120 --> 01:01:53,120 Sur le questionnaire, si tout ce que vous obtenez est pseudo, à moins que vous 1310 01:01:53,120 --> 01:01:54,550 mettre quelque chose. 1311 01:01:54,550 --> 01:02:00,070 Et puis la carte que pseudo sur C. Si vous avez un chèque dans votre 1312 01:02:00,070 --> 01:02:03,760 pseudo, comme vérifier si quelque chose est 1, qui mappe sur un si 1313 01:02:03,760 --> 01:02:05,750 état et ainsi de suite. 1314 01:02:05,750 --> 01:02:07,850 Et enfin, le code du programme en C. 1315 01:02:07,850 --> 01:02:15,000 >> Donc, revenir à atoi et prendre cinq minutes pour coder ce sur une feuille de 1316 01:02:15,000 --> 01:02:19,480 papier, qui est probablement la quantité de temps que vous voulez prendre un 1317 01:02:19,480 --> 01:02:21,260 quiz pour atoi de code. 1318 01:02:21,260 --> 01:02:27,060 Cinq à 15 minutes, de cinq à 12, à cinq 10 minutes, est sur le montant de 1319 01:02:27,060 --> 01:02:30,150 temps que vous passez sur ce question dans le quiz. 1320 01:02:30,150 --> 01:02:31,670 Donc, prendre cinq minutes, s'il vous plaît. 1321 01:02:31,670 --> 01:02:35,957 Et si vous avez des questions, soulever votre main et je vais venir autour. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SECONDAIRES CONVERSATIONS] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON HIRSCHHORN: OK, donc C'était cinq minutes. 1326 01:08:37,580 --> 01:08:39,880 C'est probablement sur le montant de fois que vous passerait sur que sur un quiz, 1327 01:08:39,880 --> 01:08:42,120 peut-être le bas de gamme de l'époque. 1328 01:08:42,120 --> 01:08:44,010 Nous récapitulons un peu. 1329 01:08:44,010 --> 01:08:45,740 Commençons coder cette. 1330 01:08:45,740 --> 01:08:49,479 Et si nous n'obtenons pas tout au long, les réponses à cette et cette 1331 01:08:49,479 --> 01:08:54,189 question quiz sont disponibles, encore une fois, L'automne 2011, c'est quand cette question 1332 01:08:54,189 --> 01:08:54,913 apparu sur le questionnaire. 1333 01:08:54,913 --> 01:08:57,830 >> Et il valait huit points sur le questionnaire alors. 1334 01:08:57,830 --> 01:09:01,140 Huit points sont à l'extrémité supérieure de la nombre de points vaut un. 1335 01:09:01,140 --> 01:09:04,790 La plupart des questions sont dans la gamme de un à six points. 1336 01:09:04,790 --> 01:09:08,500 Donc, c'est un plus difficile question, pour sûr. 1337 01:09:08,500 --> 01:09:09,750 Quelqu'un peut-il me faire commencer? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> En général, ce que nous allons à vouloir faire de cette 1340 01:09:15,380 --> 01:09:17,550 fonctionner atoi, logiquement? 1341 01:09:17,550 --> 01:09:19,569 Que voulons-nous faire? 1342 01:09:19,569 --> 01:09:22,279 Nous allons donc écrire certains pseudo. 1343 01:09:22,279 --> 01:09:24,090 >> ETUDIANT: Autre caractères en nombres entiers. 1344 01:09:24,090 --> 01:09:26,700 >> JASON HIRSCHHORN: Autre caractères en nombres entiers. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Alors, combien de caractères sommes-nous allez avoir besoin de passer? 1347 01:09:30,870 --> 01:09:32,295 >> ETUDIANT: Toutes. 1348 01:09:32,295 --> 01:09:34,100 >> ETUDIANT: Tous les personnages dans la chaîne. 1349 01:09:34,100 --> 01:09:35,540 >> JASON HIRSCHHORN: Tous les caractères de la chaîne. 1350 01:09:35,540 --> 01:09:42,180 Donc, si nous voulions passer par toutes les caractère d'une chaîne, ce qui est une chose 1351 01:09:42,180 --> 01:09:44,560 en C, nous avons vu ce qui a permis nous passons par tous les 1352 01:09:44,560 --> 01:09:45,939 caractère d'une chaîne? 1353 01:09:45,939 --> 01:09:46,819 >> ÉTUDIANTS: Une boucle for. 1354 01:09:46,819 --> 01:09:48,069 >> JASON HIRSCHHORN: Une boucle for. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Donc, nous allons faire une boucle par tous les caractères de l'art. 1357 01:09:55,330 --> 01:10:00,940 >> Alors qu'est-ce que nous allons vouloir faire quand nous obtenons un caractère spécifique? 1358 01:10:00,940 --> 01:10:02,480 Disons que nous allons nous passâmes un 90. 1359 01:10:02,480 --> 01:10:03,460 Nous obtenons le 9. 1360 01:10:03,460 --> 01:10:04,240 C'est un personnage. 1361 01:10:04,240 --> 01:10:07,440 Que voulons-nous faire avec ce caractère neuf? 1362 01:10:07,440 --> 01:10:10,082 >> ETUDIANT: Soustrayez caractère 0? 1363 01:10:10,082 --> 01:10:11,860 >> ETUDIANT: Ajouter 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON HIRSCHHORN: Soustraire il de caractère 0? 1365 01:10:13,350 --> 01:10:13,800 >> ÉTUDIANT: Oui. 1366 01:10:13,800 --> 01:10:15,573 >> JASON HIRSCHHORN: Pourquoi vous voulez faire? 1367 01:10:15,573 --> 01:10:16,560 >> ETUDIANT: [inaudible] 1368 01:10:16,560 --> 01:10:17,010 valeur. 1369 01:10:17,010 --> 01:10:18,380 Sa valeur int. 1370 01:10:18,380 --> 01:10:21,580 >> JASON HIRSCHHORN: OK, si nous prenons l' caractère 9, soustraire de 1371 01:10:21,580 --> 01:10:25,820 caractère 0 pour obtenir une nombre entier réel 9. 1372 01:10:25,820 --> 01:10:27,070 Sweet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Et comment savez-vous ce personnage 9 moins 0 caractère est de 9? 1375 01:10:37,000 --> 01:10:39,222 Quel tableau, avez-vous regardé? 1376 01:10:39,222 --> 01:10:43,130 >> ETUDIANT: Il ya logiquement neuf lieux entre 9 et 0. 1377 01:10:43,130 --> 01:10:44,620 Ou vous pouvez regarder la table ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON HIRSCHHORN: table ASCII. 1379 01:10:45,120 --> 01:10:46,490 Mais oui, vous avez raison aussi. 1380 01:10:46,490 --> 01:10:47,780 Donc, nous soustrayons 0. 1381 01:10:47,780 --> 01:10:49,010 Nous avons donc maintenant l'entier 9. 1382 01:10:49,010 --> 01:10:49,970 Et qu'est-ce que nous voulons faire avec ça? 1383 01:10:49,970 --> 01:10:54,970 Si nous avons 90, il est le premier entier nous avons, ce que nous voulons faire? 1384 01:10:54,970 --> 01:10:58,180 >> ETUDIANT: je mettrais dans un entier temporaire tableau, alors faire des mathématiques à elle 1385 01:10:58,180 --> 01:11:02,088 plus tard pour en faire une fin. 1386 01:11:02,088 --> 01:11:03,020 >> JASON HIRSCHHORN: OK. 1387 01:11:03,020 --> 01:11:06,990 >> ETUDIANT: Vous pouvez commencer à la fin de le tableau, puis aller de l'avant afin 1388 01:11:06,990 --> 01:11:10,350 que chaque fois que vous avancez, vous multipliez par 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON HIRSCHHORN: OK. 1390 01:11:10,830 --> 01:11:12,250 Cela ressemble à une jolie idée convaincante. 1391 01:11:12,250 --> 01:11:16,040 Nous pouvons commencer à la fin de notre tableau, et nous pouvons utiliser strleng. 1392 01:11:16,040 --> 01:11:17,030 Nous pouvons utiliser strleng ici. 1393 01:11:17,030 --> 01:11:18,870 Nous aurons la longueur de notre chaîne. 1394 01:11:18,870 --> 01:11:20,100 Nous commençons à la fin. 1395 01:11:20,100 --> 01:11:29,170 Et + la première, nous prenons juste que entier, et peut-être que nous créons comme un 1396 01:11:29,170 --> 01:11:32,270 nouvelle variable entière là-haut où nous faisons tout stocker. 1397 01:11:32,270 --> 01:11:37,340 Nous avons donc une boucle sur chaque caractère dans s de arrière vers l'avant, nous soustrayons 0, et 1398 01:11:37,340 --> 01:11:42,790 puis nous prenons, et en fonction de où il est, nous multiplions 1399 01:11:42,790 --> 01:11:45,860 par une puissance de 10. 1400 01:11:45,860 --> 01:11:50,644 Parce que la première, que faisons-nous multiplier le caractère le plus à droite par? 1401 01:11:50,644 --> 01:11:51,440 >> Étudiant: 10 au 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON HIRSCHHORN: 10 au 0. 1403 01:11:53,170 --> 01:11:56,010 Que faisons-nous multiplions la seconde droite caractère par? 1404 01:11:56,010 --> 01:11:57,450 >> ETUDIANT: [inaudible]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON HIRSCHHORN: Quoi? 1406 01:11:57,960 --> 01:11:59,150 >> Étudiant: 10 au 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON HIRSCHHORN: 10 au 1. 1408 01:12:00,420 --> 01:12:03,754 Le troisième personnage-droite? 1409 01:12:03,754 --> 01:12:04,580 >> Étudiant: 10 à 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON HIRSCHHORN: 10 à 2. 1411 01:12:05,350 --> 01:12:07,200 >> ETUDIANT: Désolé, je ne comprends pas ce que nous faisons ici. 1412 01:12:07,200 --> 01:12:08,640 >> JASON HIRSCHHORN: OK, Revenons, alors. 1413 01:12:08,640 --> 01:12:12,500 Nous allons donc à obtenir passé dans une chaîne. 1414 01:12:12,500 --> 01:12:14,470 Parce que nous écrivons atoi. 1415 01:12:14,470 --> 01:12:15,260 Nous sommes tellement passé dans une chaîne. 1416 01:12:15,260 --> 01:12:17,640 Disons que nous allons nous passâmes dans la chaîne 90. 1417 01:12:17,640 --> 01:12:19,930 >> La première chose que nous allons faire est de définir une nouvelle variable de type entier que nous sommes 1418 01:12:19,930 --> 01:12:22,150 aller juste pour créer comme notre nouveau entier. 1419 01:12:22,150 --> 01:12:24,630 C'est ce que nous allons pour revenir à la fin. 1420 01:12:24,630 --> 01:12:30,110 Nous avons besoin de passer par tous les caractères de la chaîne parce que nous avons déterminé 1421 01:12:30,110 --> 01:12:34,430 que nous devons toucher chacun et puis l'ajouter à notre nouveau entier. 1422 01:12:34,430 --> 01:12:36,330 >> Mais nous ne pouvons pas simplement l'ajouter comme un certain nombre. 1423 01:12:36,330 --> 01:12:38,270 Nous ne pouvons pas prendre 9 et ajouter 9 à notre entier. 1424 01:12:38,270 --> 01:12:40,560 Cela dépend de ce lieu il est dans la chaîne. 1425 01:12:40,560 --> 01:12:42,960 Nous allons avoir besoin de multiplier par une puissance de 10. 1426 01:12:42,960 --> 01:12:45,580 Parce que c'est comme ça que 10 œuvres base. 1427 01:12:45,580 --> 01:12:49,050 >> Donc, nous allons voir la réelle caractère, ou le nombre entier réel 1428 01:12:49,050 --> 01:12:53,860 nombre, en soustrayant caractère 0 de caractère 9 comme nous l'avons fait avec 1429 01:12:53,860 --> 01:12:57,560 soustrayant caractère majuscule de quel que soit le caractère que nous avions dans l'une des 1430 01:12:57,560 --> 01:12:58,120 ces problèmes. 1431 01:12:58,120 --> 01:13:04,190 Donc, nous allons réellement obtenir un nombre de 0 à 9 sauvé comme un nombre réel, et nous allons 1432 01:13:04,190 --> 01:13:07,590 multiplier par une puissance de dix en fonction où nous en sommes dans la chaîne. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Et puis nous allons rajouter dans notre nouvelle variable entière. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Donc ce que cela ressemblerait serait être - nous attirons ici. 1437 01:13:37,890 --> 01:13:40,086 Si nous sommes passés dans la chaîne 90 - 1438 01:13:40,086 --> 01:13:41,336 >> ETUDIANT: [inaudible]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON HIRSCHHORN: Mais atoi prend une chaîne. 1441 01:13:45,540 --> 01:13:46,350 Nous allons donc passer par l'exploitation. 1442 01:13:46,350 --> 01:13:49,900 Nous allons faire adopter en 90. 1443 01:13:49,900 --> 01:13:51,540 Nous allons de l'arrière vers l'avant. 1444 01:13:51,540 --> 01:13:53,920 Nous prenons le 0. 1445 01:13:53,920 --> 01:13:55,080 >> Étudiant: Je suis désolé. 1446 01:13:55,080 --> 01:13:55,880 Peut-être que c'est stupide. 1447 01:13:55,880 --> 01:13:59,440 Si nous allons nous passâmes dans une chaîne, pourquoi est-ce que nous sommes 90 1448 01:13:59,440 --> 01:14:00,260 se répercuter dans? 1449 01:14:00,260 --> 01:14:03,160 Parce que 90 est un nombre entier. 1450 01:14:03,160 --> 01:14:06,820 >> JASON HIRSCHHORN: Parce que atoi prend une chaîne et le transforme en l'entier 1451 01:14:06,820 --> 01:14:08,320 représentation de cette chaîne. 1452 01:14:08,320 --> 01:14:13,650 Mais la chaîne 90 n'est pas l'entier 90 ou le nombre 90. 1453 01:14:13,650 --> 01:14:17,920 La chaîne 90 est un tableau de deux ou trois caractères, plutôt, le 9 1454 01:14:17,920 --> 01:14:22,740 caractère, le caractère 0, et la barre oblique inverse 0 caractère. 1455 01:14:22,740 --> 01:14:26,260 >> Et nous atoi écrire parce que, pour exemple, lorsque vous prenez la commande 1456 01:14:26,260 --> 01:14:30,230 argument de la ligne, et il est enregistré dans argv, il est enregistré comme une chaîne. 1457 01:14:30,230 --> 01:14:32,940 Mais si vous voulez le traiter comme un nombre, vous avez besoin pour le convertir dans un 1458 01:14:32,940 --> 01:14:34,700 nombre entier réel. 1459 01:14:34,700 --> 01:14:37,210 Que nous avons fait une de nos séries de problèmes. 1460 01:14:37,210 --> 01:14:38,800 Que nous avons fait dans un certain nombre de nos ensembles de problèmes. 1461 01:14:38,800 --> 01:14:41,690 Tout le monde qui a eu un nombre entier comme un argument de ligne de commande. 1462 01:14:41,690 --> 01:14:46,490 C'est pour cela que notre fonction atoi prend une chaîne. 1463 01:14:46,490 --> 01:14:51,910 >> Encore une fois, dans notre exemple, nous sommes va prendre la dernière. 1464 01:14:51,910 --> 01:14:55,050 Nous allons soustraire le caractère 0 de celui-ci, parce que les caractères 0 1465 01:14:55,050 --> 01:14:58,810 soustraite par le caractère 0 vous donne le nombre réel de 0, selon l' 1466 01:14:58,810 --> 01:15:00,950 ASCII mathématiques que nous faisons. 1467 01:15:00,950 --> 01:15:04,870 >> Parce que les personnages sont représentés comme différente de leur réelle - la 1468 01:15:04,870 --> 01:15:08,830 un caractère, par exemple, minuscules un est de 97. 1469 01:15:08,830 --> 01:15:10,260 Ce n'est pas - oh là là! 1470 01:15:10,260 --> 01:15:13,290 Ce n'est pas ce que vous attendez qu'il soit, 0, par exemple. 1471 01:15:13,290 --> 01:15:16,200 Donc, vous devez soustraire le caractère d'obtenir un 0. 1472 01:15:16,200 --> 01:15:18,950 >> Donc, nous allons le faire ici pour obtenir le nombre réel. 1473 01:15:18,950 --> 01:15:22,560 Et puis nous allons multiplier par une puissance de dix en fonction de l'endroit où il 1474 01:15:22,560 --> 01:15:27,030 est dans la chaîne, et ensuite prendre que et l'ajouter à notre place de titulaire 1475 01:15:27,030 --> 01:15:32,520 variable de sorte que nous pouvons arriver à notre nouvelle entier finale. 1476 01:15:32,520 --> 01:15:35,080 Est-ce que cela a un sens pour tout le monde? 1477 01:15:35,080 --> 01:15:37,730 >> Donc, nous n'allons pas coder cette en ce moment, parce que nous sommes 1478 01:15:37,730 --> 01:15:38,830 obtenir à court de temps. 1479 01:15:38,830 --> 01:15:40,860 Je m'excuse pour le moment que. 1480 01:15:40,860 --> 01:15:44,620 Mais c'est ce qui, nous l'espérons, vous le feriez être capable de faire sur le questionnaire - à l' 1481 01:15:44,620 --> 01:15:47,710 tout le moins, obtenir ce pseudo écrit sur. 1482 01:15:47,710 --> 01:15:50,840 >> Et puis, si nous devions écrire l' pseudo, en fait, nous avons pu faire 1483 01:15:50,840 --> 01:15:51,490 assez rapidement. 1484 01:15:51,490 --> 01:15:55,230 Chaque ligne de commentaires, nous nous écrivions ici se traduit à environ 1485 01:15:55,230 --> 01:15:56,970 une ligne de code C. 1486 01:15:56,970 --> 01:16:01,780 Déclarer une nouvelle variable, écrit une boucle, une partie de soustraction, de certaines 1487 01:16:01,780 --> 01:16:07,070 multiplication, et certains affectation. 1488 01:16:07,070 --> 01:16:09,020 Nous aurions probablement voulons aussi écrire une ligne de retour. 1489 01:16:09,020 --> 01:16:12,040 Nous pourrions aussi mettre certains contrôles dans ici. 1490 01:16:12,040 --> 01:16:12,655 Ouais. 1491 01:16:12,655 --> 01:16:15,720 >> Étudiant: Alors peut-on traiter s que la chaîne réelle? 1492 01:16:15,720 --> 01:16:18,730 Parce que je sais que c'est juste une adresse. 1493 01:16:18,730 --> 01:16:22,090 Comme, comment voulez-vous obtenir la longueur de la chaîne étant passé à travers? 1494 01:16:22,090 --> 01:16:25,310 >> JASON HIRSCHHORN: Alors, comment la longueur d'une chaîne? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> ETUDIANT: strlen, ouais. 1497 01:16:26,660 --> 01:16:30,550 Mais pouvez-vous mettre s que le argument en faveur de cela? 1498 01:16:30,550 --> 01:16:34,620 >> JASON HIRSCHHORN: Donc strlen prend une étoile char. 1499 01:16:34,620 --> 01:16:38,090 Et il s'ensuit que l'omble étoile, et il garde compter jusqu'à ce qu'il arrive à un 1500 01:16:38,090 --> 01:16:41,865 barre oblique inverse 0. strlen était en fait l'un des autres programmes, nous 1501 01:16:41,865 --> 01:16:42,850 allaient code. 1502 01:16:42,850 --> 01:16:44,560 C'est un autre bon code. 1503 01:16:44,560 --> 01:16:47,270 Que l'on est un peu plus facile, parce que si vous allez penser que 1504 01:16:47,270 --> 01:16:47,830 conceptuellement - 1505 01:16:47,830 --> 01:16:51,620 Je viens de dire à haute voix - strlen suit un pointeur et continue à aller et 1506 01:16:51,620 --> 01:16:54,210 comptage et de suivi jusqu'à ce que vous atteignez une barre oblique inverse 0. 1507 01:16:54,210 --> 01:16:56,530 >> ETUDIANT: OK, il a obtenu. 1508 01:16:56,530 --> 01:17:00,200 >> JASON HIRSCHHORN: donc préférable de chance sur quizz 0 demain. 1509 01:17:00,200 --> 01:17:03,170 Si vous avez des questions, je vais être à l'extérieur après. 1510 01:17:03,170 --> 01:17:05,610 N'hésitez pas à m'envoyer un mail. 1511 01:17:05,610 --> 01:17:08,480 Tendez la main à votre propre TF si vous êtes pas dans mon article, ou obtenir mon 1512 01:17:08,480 --> 01:17:10,005 e-mail si vous le souhaitez. 1513 01:17:10,005 --> 01:17:13,140 >> Si vous voulez à paniquer et envoyez juste moi un email, un email de freakout, je vais 1514 01:17:13,140 --> 01:17:16,710 vous renvoyer, comme un visage souriant, ou, comme, une blague ou quelque chose. 1515 01:17:16,710 --> 01:17:18,190 Alors n'hésitez pas à faire aussi bien. 1516 01:17:18,190 --> 01:17:20,750 Bonne chance à nouveau, et je vais vous voir la semaine prochaine. 1517 01:17:20,750 --> 01:17:23,435