1 00:00:00,000 --> 00:00:03,269 >> [Jouer de la musique] 2 00:00:03,269 --> 00:00:05,391 3 00:00:05,391 --> 00:00:06,640 CAMILLE Rekhson: Salut, tout le monde. 4 00:00:06,640 --> 00:00:10,120 Bienvenue sur le quiz CS50 zéro session d'examen. 5 00:00:10,120 --> 00:00:10,770 Je suis Camille. 6 00:00:10,770 --> 00:00:13,140 Et je vais aller sur certains sujets avec vous 7 00:00:13,140 --> 00:00:16,890 les gars aujourd'hui pour vous aider préparer pour le quiz. 8 00:00:16,890 --> 00:00:20,840 Alors, voici notre non exhaustive liste des sujets que vous 9 00:00:20,840 --> 00:00:23,210 devrait être familier avec le quiz. 10 00:00:23,210 --> 00:00:25,740 Ceux-ci ont été prises directement du syllabus. 11 00:00:25,740 --> 00:00:26,990 Je sais que cela semble beaucoup. 12 00:00:26,990 --> 00:00:30,870 Mais croyez-moi, vous avez appris tous ces choses dans les dernières semaines. 13 00:00:30,870 --> 00:00:33,210 >> Donc, nous allons certainement aller sur un grand nombre de ces aujourd'hui. 14 00:00:33,210 --> 00:00:35,825 Mais aussi prendre un certain temps sur votre propre à commenter ces choses. 15 00:00:35,825 --> 00:00:38,450 Et si vous ne connaissiez pas ce que certaines de ces choses sont, 16 00:00:38,450 --> 00:00:42,400 assurez-vous demander de nous. 17 00:00:42,400 --> 00:00:45,985 Aussi, pour le mot officiel sur le quiz, aller à ce lien. 18 00:00:45,985 --> 00:00:48,860 Cela aura toutes les informations avec la chambre que vous devez aller, 19 00:00:48,860 --> 00:00:52,960 diviser par ordre alphabétique, et aussi quelques conseils sur ce matériaux 20 00:00:52,960 --> 00:00:56,470 vous devriez être en train d'étudier, et quelle sorte des questions du quiz vous pouvez vous attendre. 21 00:00:56,470 --> 00:01:01,090 Donc, assurez-vous de vérifier. 22 00:01:01,090 --> 00:01:03,810 >> Aussi, quelques conseils pour quand vous se préparent à l'examen. 23 00:01:03,810 --> 00:01:05,730 Les pratiques de codage sur le papier. 24 00:01:05,730 --> 00:01:09,280 Je sais que vous avez pris l'habitude d'avoir la vérification des IDE pour vos erreurs pour vous, 25 00:01:09,280 --> 00:01:12,280 et it's-- lorsque vous tapez le haut, il est un peu différent que d'avoir 26 00:01:12,280 --> 00:01:13,113 pour écrire les choses. 27 00:01:13,113 --> 00:01:14,560 Donc pratiquer faire quelques codage. 28 00:01:14,560 --> 00:01:17,910 Quelques bonnes fonctions de pratiquer faire sont strlen et atoi, 29 00:01:17,910 --> 00:01:20,450 voir si vous pourriez écrire ceux sur votre propre. 30 00:01:20,450 --> 00:01:21,970 Être familier avec les ensembles de problèmes. 31 00:01:21,970 --> 00:01:24,200 La plupart des années il ya des questions qui concernent 32 00:01:24,200 --> 00:01:25,700 à une partie du matériau de problème posé. 33 00:01:25,700 --> 00:01:30,480 Donc, assurez-vous que vous comprenez comment faire tous les ensembles de problèmes. 34 00:01:30,480 --> 00:01:35,240 >> Essayez de faire quelques-uns des anciens quiz sous la contrainte de temps de 75 minutes. 35 00:01:35,240 --> 00:01:37,290 Un grand nombre des quiz peut être une sorte de longue. 36 00:01:37,290 --> 00:01:39,680 Donc, il est une bonne façon de donner vous un peu de pratique, 37 00:01:39,680 --> 00:01:41,650 et combien de temps il sera vous prendre, et comment vous 38 00:01:41,650 --> 00:01:45,360 devrait diviser votre temps pour vous assurer vous avez terminé tout à la fin. 39 00:01:45,360 --> 00:01:49,690 Et aussi, vous obtenez une seule page, deux feuilles de référence face 40 00:01:49,690 --> 00:01:52,962 que vous pouvez écrire ce que vous veulent à utiliser pendant le quiz. 41 00:01:52,962 --> 00:01:54,670 Ainsi, lorsque vous créez ça, ça aussi 42 00:01:54,670 --> 00:01:57,860 excellente façon d'étudier parce vous examinerez genre de choses 43 00:01:57,860 --> 00:01:59,610 comme vous l'écrivez. 44 00:01:59,610 --> 00:02:05,421 >> Donc, des questions générales concernant le quiz, ou comment il fonctionne? 45 00:02:05,421 --> 00:02:05,921 Oui. 46 00:02:05,921 --> 00:02:09,167 >> AUDIENCE: Will cette liste de sujets que vous venez montré disponible pour nous 47 00:02:09,167 --> 00:02:09,820 en ligne? 48 00:02:09,820 --> 00:02:12,736 >> CAMILLE Rekhson: Cette diapositive entière spectacle sera affiché sur le site Web. 49 00:02:12,736 --> 00:02:16,040 Aussi, la vidéo de l'examen d'aujourd'hui session sera sur le site. 50 00:02:16,040 --> 00:02:19,250 Donc, ne vous inquiétez pas trop à propos les choses par écrit partout. 51 00:02:19,250 --> 00:02:20,437 Il y serons tous. 52 00:02:20,437 --> 00:02:21,270 D'autres questions? 53 00:02:21,270 --> 00:02:23,810 54 00:02:23,810 --> 00:02:26,960 OK, alors nous allons commencer. 55 00:02:26,960 --> 00:02:30,860 >> Donc, une chose de se familiariser avec est les différents types de données et la taille 56 00:02:30,860 --> 00:02:32,486 qu'ils prennent. 57 00:02:32,486 --> 00:02:35,360 Cela peut aussi être une grande chose à écrire sur votre feuille de référence, 58 00:02:35,360 --> 00:02:37,240 juste pour vous assurer que vous se souvenir de tous ceux-ci. 59 00:02:37,240 --> 00:02:39,200 Mais-- afin caractères sont 1 octet. 60 00:02:39,200 --> 00:02:40,700 Ints sont 4 octets. 61 00:02:40,700 --> 00:02:44,450 Un long, long, qui est fondamentalement plus espace pour un nombre entier, est de 8 octets. 62 00:02:44,450 --> 00:02:46,560 Un flotteur est de 4 octets. 63 00:02:46,560 --> 00:02:50,620 Un double, qui vous donne essentiellement plus d'espace pour stocker un flotteur, est de 8 octets. 64 00:02:50,620 --> 00:02:54,210 Et puis un pointeur est également 8 octets. 65 00:02:54,210 --> 00:02:56,270 Des questions sur ces? 66 00:02:56,270 --> 00:03:00,380 67 00:03:00,380 --> 00:03:05,580 >> Donc binaire est un autre sujet que nous avons couvert un peu ce semestre. 68 00:03:05,580 --> 00:03:07,910 Alors, faisons un peu pratiquer avec conversion 69 00:03:07,910 --> 00:03:10,000 entre le binaire et décimal. 70 00:03:10,000 --> 00:03:13,950 Donc, quelqu'un a une idée de ce que que première serait? 71 00:03:13,950 --> 00:03:32,840 72 00:03:32,840 --> 00:03:34,860 N'importe qui? 73 00:03:34,860 --> 00:03:36,270 Ouais, il est 42. 74 00:03:36,270 --> 00:03:39,200 Donc, si vous vous souvenez, chaque des places en binaire 75 00:03:39,200 --> 00:03:41,860 est fondamentalement comme 2 à la puissance de cet endroit. 76 00:03:41,860 --> 00:03:43,750 >> Alors que la première place est 2 à la puissance 0. 77 00:03:43,750 --> 00:03:46,710 Et nous avons 0 là, donc rien. 78 00:03:46,710 --> 00:03:48,700 Le prochain endroit est 2 à la première puissance. 79 00:03:48,700 --> 00:03:51,220 Et nous avons un 1 là, de sorte que est essentiellement un 2. 80 00:03:51,220 --> 00:03:53,642 Le prochain endroit est de 2 à la seconde, ce qui est quatre. 81 00:03:53,642 --> 00:03:54,850 Nous ne disposons pas quelque chose là. 82 00:03:54,850 --> 00:03:59,390 Le prochain endroit est plus de 2 à la troisième, qui serait 8. 83 00:03:59,390 --> 00:04:02,230 Et nous en avons un il. 84 00:04:02,230 --> 00:04:03,470 Et nous continuons. 85 00:04:03,470 --> 00:04:07,720 Ce last-- le plus à Celui de gauche est où nous avons 32. 86 00:04:07,720 --> 00:04:13,437 Et donc, nous avons essentiellement 32 plus 8, plus 2 pour obtenir 42. 87 00:04:13,437 --> 00:04:14,020 Des questions? 88 00:04:14,020 --> 00:04:15,820 >> AUDIENCE: Quel est l'indice pour? 89 00:04:15,820 --> 00:04:17,399 >> CAMILLE Rekhson: L'indice nous dit, fondamentalement, il est binaire. 90 00:04:17,399 --> 00:04:18,230 Donc, il ya un 2 il. 91 00:04:18,230 --> 00:04:20,579 Si il y avait dans la prochaine like-- l'un, ou quand nous sommes conversion décimal 92 00:04:20,579 --> 00:04:24,350 en binaire, il ya un 10 nous montrant que ce nombre est à l'origine en décimal. 93 00:04:24,350 --> 00:04:25,194 >> AUDIENCE: Je vous remercie. 94 00:04:25,194 --> 00:04:26,110 >> CAMILLE Rekhson: Ouais. 95 00:04:26,110 --> 00:04:28,790 D'autres questions sur celui-là? 96 00:04:28,790 --> 00:04:31,110 OK, donc nous allons essayer la prochaine on alors, décimal en binaire. 97 00:04:31,110 --> 00:04:35,034 Donc, en prenant 50 et mettant qu'en binaire. 98 00:04:35,034 --> 00:04:35,950 Comment feriez-vous cela? 99 00:04:35,950 --> 00:04:44,331 100 00:04:44,331 --> 00:04:45,317 Oui. 101 00:04:45,317 --> 00:04:49,754 >> Audience: 110010. 102 00:04:49,754 --> 00:04:50,760 >> CAMILLE Rekhson: Oui. 103 00:04:50,760 --> 00:04:54,410 Donc One-- un moyen facile de penser la conversion de décimal en binaire 104 00:04:54,410 --> 00:04:57,950 est to-- il est souvent utile d'écrire ce que les différentes puissances de 2 sont. 105 00:04:57,950 --> 00:05:01,460 Et puis passer par là, et de voir quel que soit le plus élevé de ceux 106 00:05:01,460 --> 00:05:05,320 est que vous pouvez mettre dans le nombre décimal, sans passer par-dessus. 107 00:05:05,320 --> 00:05:09,040 >> Donc dans ce cas, l'un des les puissances de 2 est de 32. 108 00:05:09,040 --> 00:05:10,560 Donc 32 va dans 50. 109 00:05:10,560 --> 00:05:14,100 Mais la prochaine mise sous tension serait 64, qui, évidemment, ne rentre pas dans 50. 110 00:05:14,100 --> 00:05:16,343 Donc, nous avons le plus élevé est le 32. 111 00:05:16,343 --> 00:05:17,343 Le prochain jusqu'au 16. 112 00:05:17,343 --> 00:05:20,140 Et 32 plus 16 est seulement 48. 113 00:05:20,140 --> 00:05:21,350 Alors que se glisse dans 50. 114 00:05:21,350 --> 00:05:22,722 Alors que nous avons 1 est dans les deux d'entre eux. 115 00:05:22,722 --> 00:05:25,180 Et puis, si nous continuons à descendre, la seule chose que nous devons partis 116 00:05:25,180 --> 00:05:27,510 2 est plus pour obtenir de 48 à 50. 117 00:05:27,510 --> 00:05:31,860 Alors nous avons un 1 dans cette position, et un 0 dans la dernière position. 118 00:05:31,860 --> 00:05:35,371 Parce qu'il n'y a rien dans 2 au 0-ème place. 119 00:05:35,371 --> 00:05:37,120 Questions sur la conversion décimal en binaire? 120 00:05:37,120 --> 00:05:40,830 121 00:05:40,830 --> 00:05:44,100 >> Alors maintenant, nous allons essayer de faire certains addition binaire. 122 00:05:44,100 --> 00:05:47,235 Comment lorsque vous ajoutez les deux en haut? 123 00:05:47,235 --> 00:05:47,735 Oui. 124 00:05:47,735 --> 00:05:51,130 >> Audience: 11100. 125 00:05:51,130 --> 00:05:52,110 >> CAMILLE Rekhson: Oui. 126 00:05:52,110 --> 00:05:55,540 Donc, faire plus en binaire est assez la même que de le faire en décimal. 127 00:05:55,540 --> 00:05:59,390 Sauf si vous avez deux être de 1 additionnés, 1 + 1 est égal à 2, 128 00:05:59,390 --> 00:06:02,980 mais 2 en binaire est 1 0. 129 00:06:02,980 --> 00:06:07,090 Donc, vous devez porter le 1, et de garder pour la porter ces quelques colonnes. 130 00:06:07,090 --> 00:06:10,260 Et à part ça, il suffit d'ajouter normalement. 131 00:06:10,260 --> 00:06:13,125 Vous avez des questions à ce sujet? 132 00:06:13,125 --> 00:06:13,625 Oui. 133 00:06:13,625 --> 00:06:16,487 >> AUDIENCE: Désolé, ce qui est le dernier endroit? 134 00:06:16,487 --> 00:06:18,475 Il ya six numéros. 135 00:06:18,475 --> 00:06:23,260 Donc, la colonne de gauche, quelle valeur est-il? 136 00:06:23,260 --> 00:06:24,760 CAMILLE Rekhson: Sur ce fond un? 137 00:06:24,760 --> 00:06:26,340 Public: Sur celle du haut, pour 50. 138 00:06:26,340 --> 00:06:27,340 CAMILLE Rekhson: Pour 50? 139 00:06:27,340 --> 00:06:29,040 Oh, donc le plus à gauche est 32. 140 00:06:29,040 --> 00:06:29,760 >> AUDIENCE: 32? 141 00:06:29,760 --> 00:06:36,770 >> CAMILLE Rekhson: Ouais, donc il serait être de 32, 16, puis 8, 4, 2, 1 ou 0--. 142 00:06:36,770 --> 00:06:39,380 Eh bien, il est 2 du zéro, qui est de 1. 143 00:06:39,380 --> 00:06:41,110 Oui. 144 00:06:41,110 --> 00:06:43,834 Toutes les autres questions à ce sujet? 145 00:06:43,834 --> 00:06:47,420 OK, donc nous allons faire un peu avec la valeur hexadécimale. 146 00:06:47,420 --> 00:06:49,570 Donc, cela pourrait être un peu moins familier, 147 00:06:49,570 --> 00:06:51,680 parce que je sais que nous avons fait beaucoup plus avec binaire. 148 00:06:51,680 --> 00:06:54,050 Mais une très bonne façon de penser hexadécimale 149 00:06:54,050 --> 00:06:57,540 est de briser un binaire Numéro en 4 morceaux de bits. 150 00:06:57,540 --> 00:07:00,950 Parce que chacun 4 bits d'un nombre binaire est fondamentalement 151 00:07:00,950 --> 00:07:04,560 l'un des nombres hexadécimaux. 152 00:07:04,560 --> 00:07:07,420 >> Donc, si nous avons cette première, Fondamentalement, nous avons huit des 1. 153 00:07:07,420 --> 00:07:08,620 Donc, ceux qui peuvent être divisés up-- 154 00:07:08,620 --> 00:07:09,600 >> Audience: 255. 155 00:07:09,600 --> 00:07:10,933 >> CAMILLE Rekhson: le dire. 156 00:07:10,933 --> 00:07:13,772 Audience: 255 en décimal, ou 0xFF en hexadécimal. 157 00:07:13,772 --> 00:07:14,980 CAMILLE Rekhson: Oui, il est. 158 00:07:14,980 --> 00:07:18,860 Donc, si vous divisez que jusqu'à en deux morceaux de 4 bits, 159 00:07:18,860 --> 00:07:20,950 nous avons essentiellement quatre séries de 1. 160 00:07:20,950 --> 00:07:22,880 Quel est le maximum-- fondamentalement un maximum 161 00:07:22,880 --> 00:07:24,329 nous pouvons obtenir avec 4 bits en binaire. 162 00:07:24,329 --> 00:07:27,120 Et le maximum que nous pouvions obtenir pour qui en hexadécimal serait un F. 163 00:07:27,120 --> 00:07:30,290 Donc, nous aurions deux F de. 164 00:07:30,290 --> 00:07:31,800 Vous avez des questions à ce sujet? 165 00:07:31,800 --> 00:07:32,490 Oui? 166 00:07:32,490 --> 00:07:35,184 >> AUDIENCE: Pouvez-vous répéter. 167 00:07:35,184 --> 00:07:36,100 CAMILLE Rekhson: Bien sûr. 168 00:07:36,100 --> 00:07:39,160 Ainsi, chaque, au fond, lieu de hexadécimale est 169 00:07:39,160 --> 00:07:42,570 équivalent à 4-bits d'un binaire. 170 00:07:42,570 --> 00:07:46,830 Donc, la meilleure façon de le faire est de le casser en morceaux de 4 bits. 171 00:07:46,830 --> 00:07:48,690 Donc dans ce cas, nous avons huit des 1. 172 00:07:48,690 --> 00:07:51,010 Donc, si nous nous séparons ceux en deux morceaux de 4 bits, 173 00:07:51,010 --> 00:07:54,350 nous aurions deux séries de quatre des 1. 174 00:07:54,350 --> 00:07:57,181 Et chacun de ceux est équivalent à F. 175 00:07:57,181 --> 00:07:58,930 Si vous pensez que about-- Je sais que nos cerveaux sont 176 00:07:58,930 --> 00:08:00,415 type de câble à penser plus par décimal, 177 00:08:00,415 --> 00:08:01,831 parce que ce que nous sommes habitués. 178 00:08:01,831 --> 00:08:06,030 Donc, d'une manière que vous pourriez penser que ce les quatre des 1 est égal à 15 en décimal. 179 00:08:06,030 --> 00:08:12,960 Et 15 en hexadécimal est F. Voilà une autre façon que vous pouvez penser à travers elle. 180 00:08:12,960 --> 00:08:13,459 Oui. 181 00:08:13,459 --> 00:08:14,790 >> Public: Quelle est la 0x pour? 182 00:08:14,790 --> 00:08:18,240 >> CAMILLE Rekhson: La 0x indique qu'il est hexadécimal. 183 00:08:18,240 --> 00:08:21,900 Nous avons donc juste que préfixer là, normalement. 184 00:08:21,900 --> 00:08:24,396 Autres questions à ce sujet. 185 00:08:24,396 --> 00:08:27,100 OK, nous allons donc essayer d'aller puis dans l'autre sens. 186 00:08:27,100 --> 00:08:28,712 Dans ce cas, nous have-- désolé? 187 00:08:28,712 --> 00:08:29,628 AUDIENCE: [inaudible]. 188 00:08:29,628 --> 00:08:32,095 189 00:08:32,095 --> 00:08:33,720 CAMILLE Rekhson: Nous allons binaire. 190 00:08:33,720 --> 00:08:36,039 Donc, dans l'autre sens. 191 00:08:36,039 --> 00:08:42,090 Mais dans ce cas, nous avons 5 et A. Donc, si nous pensons à ce sujet, 192 00:08:42,090 --> 00:08:46,260 si chacun de la those-- 5 et A sont le tant va représenter un morceau de 4 bits, 193 00:08:46,260 --> 00:08:49,003 comment voulez-vous dire 5 en binaire? 194 00:08:49,003 --> 00:08:51,120 >> PUBLIC: 0101. 195 00:08:51,120 --> 00:08:53,100 >> CAMILLE Rekhson: Ouais, de telle sorte que la partie est 0101. 196 00:08:53,100 --> 00:08:55,250 Et puis, comment voulez-vous dire un in-- 197 00:08:55,250 --> 00:08:56,910 >> AUDIENCE: 10. 198 00:08:56,910 --> 00:08:58,243 CAMILLE Rekhson: Dites it-- désolé? 199 00:08:58,243 --> 00:08:58,990 AUDIENCE: 10. 200 00:08:58,990 --> 00:09:02,052 CAMILLE Rekhson: Ouais, donc qui est la deuxième partie. 201 00:09:02,052 --> 00:09:04,010 Et puis, si vous mettez les deux ensemble, qui est 202 00:09:04,010 --> 00:09:06,440 comment vous obtenez le plein binaire pour l'hexadécimal. 203 00:09:06,440 --> 00:09:06,940 Oui? 204 00:09:06,940 --> 00:09:10,620 >> Public: Pour savoir que A est 1010, que vous avez à mémoriser? 205 00:09:10,620 --> 00:09:12,460 Ou pouvez-vous like-- 206 00:09:12,460 --> 00:09:14,380 >> CAMILLE Rekhson: Donc, si vous-- l'differe-- sorte 207 00:09:14,380 --> 00:09:16,790 quand vous allez à travers binaire, essentiellement binaire 208 00:09:16,790 --> 00:09:20,550 a 0 à 9 et A à F comme ses 16 choses. 209 00:09:20,550 --> 00:09:25,420 Donc, si tout le chemin 0 à 9-- si vous-- 9, puis A, essentiellement 210 00:09:25,420 --> 00:09:29,640 si nous avons converti en décimal, A serait comme 10, B serait comme 11. 211 00:09:29,640 --> 00:09:35,616 Et si vous pensez à la 1010 binaire est 8 et 2, 212 00:09:35,616 --> 00:09:37,990 parce que ceux sont les deux lieux qui ajoutent jusqu'à 10, qui 213 00:09:37,990 --> 00:09:41,820 est exactement ce que A est équivalent à. 214 00:09:41,820 --> 00:09:45,114 Voilà donc une sorte de facile façon de penser à ce sujet. 215 00:09:45,114 --> 00:09:46,405 Autres questions sur hexadécimal. 216 00:09:46,405 --> 00:09:50,510 217 00:09:50,510 --> 00:09:56,870 >> OK, alors maintenant nous allons prendre Un regard sur les opérateurs binaires. 218 00:09:56,870 --> 00:09:58,882 Donc, ce peut certainement monter sur le quiz. 219 00:09:58,882 --> 00:10:00,590 Je sais que nous avons pas travaillé avec eux beaucoup. 220 00:10:00,590 --> 00:10:02,756 Mais nous allons juste faire une petite revue de ces derniers. 221 00:10:02,756 --> 00:10:05,490 Alors espérons qu'ils seront un peu plus familier pour vous. 222 00:10:05,490 --> 00:10:10,220 Ainsi, les six opérateurs de bits que nous avons sont listés ici. 223 00:10:10,220 --> 00:10:13,340 Et ils nous ont laissé manipuler des bits individuels. 224 00:10:13,340 --> 00:10:16,676 Donc, l'opérateur ET est un seul esperluette. 225 00:10:16,676 --> 00:10:18,550 Ne pas confondre cela avec la double esperluette, 226 00:10:18,550 --> 00:10:21,840 qui est le ET logique que nous permet de comparer deux choses. 227 00:10:21,840 --> 00:10:25,860 >> Le single ET est comment nous pouvons manipuler les choses au niveau du bit. 228 00:10:25,860 --> 00:10:29,910 Donc, cela nous donne le résultat de 1 si les deux des arguments que nous comparons 229 00:10:29,910 --> 00:10:32,440 sont les same-- ou sont 1. 230 00:10:32,440 --> 00:10:39,370 Et la barre verticale, OU, donnera nous 1 si au moins l'un d'eux est de 1. 231 00:10:39,370 --> 00:10:41,460 Donc, fondamentalement, exactement ce que les mots signifient. 232 00:10:41,460 --> 00:10:46,640 Et, si les deux bits sont 1, 1 et 1 nous donne 1. 233 00:10:46,640 --> 00:10:51,769 Mais avec l'OU, si elle est 0 ou 1, ou 1 ou 1, dans les deux cas, 234 00:10:51,769 --> 00:10:53,060 nous avons 1 comme étant l'un d'eux. 235 00:10:53,060 --> 00:10:54,101 Alors nous aurions une 1. 236 00:10:54,101 --> 00:10:56,320 AUDIENCE: Qu'entendez-vous qu'il dit lui donne 1? 237 00:10:56,320 --> 00:10:58,236 >> CAMILLE Rekhson: Le résultat. En quelque sorte, comme vous 238 00:10:58,236 --> 00:11:05,060 would-- si vous avez 0 et 1, la résultat de cette serait 1-- ou 0 239 00:11:05,060 --> 00:11:08,920 et 1 des résultats obtenus par ce serait 0, désolé. 240 00:11:08,920 --> 00:11:12,190 Ouais, il a eu la gentillesse de la résultat de l'expression. 241 00:11:12,190 --> 00:11:16,520 Et puis, ce symbole caret est le XOR, ou OU exclusif. 242 00:11:16,520 --> 00:11:21,920 Cela signifie donc que exclusivement une ou exactement l'un des deux arguments est égal à 1. 243 00:11:21,920 --> 00:11:24,210 Et puis ce serait vous donner 1. 244 00:11:24,210 --> 00:11:27,370 >> La petite ligne ondulée est l'opérateur NOT. 245 00:11:27,370 --> 00:11:31,940 Donc, contrairement au reste d'entre eux, qui fonctionnent sur une paire de bits, 246 00:11:31,940 --> 00:11:34,930 l'opérateur ne prend pas seulement un bit, et retournez-le. 247 00:11:34,930 --> 00:11:37,640 Donc, si vous give-- si vous faites PAS 0, cela vous donnerait 1. 248 00:11:37,640 --> 00:11:40,248 Et si vous ne le faites pas 1, cela vous donnerait 0. 249 00:11:40,248 --> 00:11:40,748 Oui? 250 00:11:40,748 --> 00:11:41,150 >> Public: Quelle est la différence entre l'OU avec une ligne 251 00:11:41,150 --> 00:11:41,983 et la ou avec deux? 252 00:11:41,983 --> 00:11:44,430 253 00:11:44,430 --> 00:11:46,930 CAMILLE Rekhson: Donc l'OR avec deux lignes est la logique OU. 254 00:11:46,930 --> 00:11:52,430 Voilà donc pour comparer deux entiers pleins, ou two-- 255 00:11:52,430 --> 00:11:53,730 pour voir si les choses sont égales. 256 00:11:53,730 --> 00:11:58,340 Ou comme ce faire est égal à cela, OU il est égal à ce genre de chose. 257 00:11:58,340 --> 00:12:04,090 Alors que la barre unique ou, est de faire les choses au niveau du bit. 258 00:12:04,090 --> 00:12:04,590 Oui. 259 00:12:04,590 --> 00:12:06,680 >> AUDIENCE: Qu'entendez-vous par bit? 260 00:12:06,680 --> 00:12:10,330 >> CAMILLE Rekhson: Donc bit travaille directement avec les bits en binaire. 261 00:12:10,330 --> 00:12:11,596 >> AUDIENCE: Oh, je vois. 262 00:12:11,596 --> 00:12:15,000 >> CAMILLE Rekhson: Ouais, donc travailler avec 0 et de 1. 263 00:12:15,000 --> 00:12:18,310 Nous ferons quelques exemples de ce après, il est juste afin de ne pas trop confus. 264 00:12:18,310 --> 00:12:20,970 Et puis les deux derniers sont le décalage à gauche et le décalage à droite. 265 00:12:20,970 --> 00:12:23,970 Qui sont essentiellement deux de moins que signes ou supérieure à deux signes. 266 00:12:23,970 --> 00:12:26,294 Et ils ont à peu décalés le nombre donné de places 267 00:12:26,294 --> 00:12:27,710 que vous donnez dans la direction. 268 00:12:27,710 --> 00:12:29,980 Donc, il serait soit le déplacer vers la gauche, ou vers la droite. 269 00:12:29,980 --> 00:12:30,480 Oui? 270 00:12:30,480 --> 00:12:32,470 Public: Quelle est la syntaxe d'exécution? 271 00:12:32,470 --> 00:12:33,950 >> CAMILLE Rekhson: Nous allons passer par un exemple dans une seconde. 272 00:12:33,950 --> 00:12:35,680 Donc, je l'espère, cela peut aider. 273 00:12:35,680 --> 00:12:41,060 Vous avez des questions sur tout ce qui est ici, before-- OK. 274 00:12:41,060 --> 00:12:43,821 Donc, en passant par quelques exemples. 275 00:12:43,821 --> 00:12:45,070 Commençons par l'ET chers. 276 00:12:45,070 --> 00:12:47,880 Que ferions-nous obtenir si nous avons fait 0 et 1? 277 00:12:47,880 --> 00:12:48,899 >> AUDIENCE: 0. 278 00:12:48,899 --> 00:12:50,690 CAMILLE Rekhson: OK, et si nous avons fait 1 ET 1? 279 00:12:50,690 --> 00:12:51,622 Public: 1. 280 00:12:51,622 --> 00:12:54,490 CAMILLE Rekhson: Ouais, si nous avons fait 0 ou un? 281 00:12:54,490 --> 00:12:55,094 Public: 1. 282 00:12:55,094 --> 00:12:56,510 CAMILLE Rekhson: Comment environ 1 ou 1? 283 00:12:56,510 --> 00:12:57,404 Public: 1. 284 00:12:57,404 --> 00:13:00,410 CAMILLE Rekhson: OK, comment environ 0 XOR 1? 285 00:13:00,410 --> 00:13:01,380 Public: 1. 286 00:13:01,380 --> 00:13:03,120 CAMILLE Rekhson: Et 1 XOR 1? 287 00:13:03,120 --> 00:13:03,902 AUDIENCE: 0. 288 00:13:03,902 --> 00:13:05,360 CAMILLE Rekhson: Les gars, vous êtes bon. 289 00:13:05,360 --> 00:13:06,510 Que diriez-vous pas 0? 290 00:13:06,510 --> 00:13:07,265 >> Public: 1. 291 00:13:07,265 --> 00:13:08,390 CAMILLE Rekhson: et non 1? 292 00:13:08,390 --> 00:13:09,602 AUDIENCE: 0. 293 00:13:09,602 --> 00:13:12,810 CAMILLE Rekhson: OK, et puis cette dernière l'un est un peu un avec le déplacement. 294 00:13:12,810 --> 00:13:18,700 Donc, si nous initialement fixé x soit 8, et alors y est x décalé vers la gauche 3, 295 00:13:18,700 --> 00:13:19,760 qu'est-ce que nous donner? 296 00:13:19,760 --> 00:13:20,676 >> AUDIENCE: [inaudible]. 297 00:13:20,676 --> 00:13:22,817 298 00:13:22,817 --> 00:13:24,150 CAMILLE Rekhson: le dire. 299 00:13:24,150 --> 00:13:26,740 AUDIENCE: [inaudible]. 300 00:13:26,740 --> 00:13:28,766 CAMILLE Rekhson: Donc, ce nous donne effectivement 64. 301 00:13:28,766 --> 00:13:29,876 AUDIENCE: [inaudible]. 302 00:13:29,876 --> 00:13:32,250 CAMILLE Rekhson: Donc, je suis juste va écrire ce ici, 303 00:13:32,250 --> 00:13:34,700 donc cela fait un peu de sens. 304 00:13:34,700 --> 00:13:45,120 Si nous avons 2 à 0, 2 à la 1, 2 de la 2, 2 à 3 va y avoir huit. 305 00:13:45,120 --> 00:13:52,380 Et si nous voulons le faire passer 3 plus de bits vers la gauche, ce serait de 2 à 4, 306 00:13:52,380 --> 00:13:57,270 2 à 5, et 2 à la 6, et 2 à la 6 est 64. 307 00:13:57,270 --> 00:13:59,920 308 00:13:59,920 --> 00:14:01,110 Est-ce que cela a du sens? 309 00:14:01,110 --> 00:14:05,291 310 00:14:05,291 --> 00:14:05,791 Oui. 311 00:14:05,791 --> 00:14:08,725 >> Public: Est-ce que tous les quarts des 1 et de 0 du nombre binaire à the-- 312 00:14:08,725 --> 00:14:09,600 >> CAMILLE Rekhson: Oui. 313 00:14:09,600 --> 00:14:12,150 314 00:14:12,150 --> 00:14:15,170 Et vous ne serez pas avoir à vous soucier de la quiz sur ceux-ci étant négative. 315 00:14:15,170 --> 00:14:19,510 Nous ne ferons pas affaire avec vous changements négatifs en aucune façon. 316 00:14:19,510 --> 00:14:24,070 Toutes les autres questions à ce sujet? 317 00:14:24,070 --> 00:14:24,570 Oui. 318 00:14:24,570 --> 00:14:30,570 >> Audience: Si ça se déplaçant vers la droite, tout ce qui est tout ce qui wasn't-- 319 00:14:30,570 --> 00:14:33,220 était pas partie à l'origine de la chose 0? 320 00:14:33,220 --> 00:14:37,110 >> CAMILLE Rekhson: Ouais, vous feriez il suffit d'ajouter des 0 dans l'original. 321 00:14:37,110 --> 00:14:38,110 Oui. 322 00:14:38,110 --> 00:14:41,540 >> Auditoire: Alors, quelle est cette 100 décalée vers la droite trois fois? 323 00:14:41,540 --> 00:14:43,290 CAMILLE Rekhson: 100 décalée vers la droite, 324 00:14:43,290 --> 00:14:46,057 alors ce serait prendre tous les 1 et de 0 et juste de les transférer 325 00:14:46,057 --> 00:14:48,515 vers la droite autant de fois que vous le déplacement vers la droite. 326 00:14:48,515 --> 00:14:50,452 >> AUDIENCE: [inaudible]? 327 00:14:50,452 --> 00:14:53,160 CAMILLE Rekhson: Eh bien, sont 100-- vous parler de 100 en binaire, 328 00:14:53,160 --> 00:14:53,910 ou 100 en décimal? 329 00:14:53,910 --> 00:14:55,750 AUDIENCE: Je suis désolé, 100 en binaire. 330 00:14:55,750 --> 00:14:58,916 >> CAMILLE Rekhson: 100 en binaire, si vous passez à la droite- 331 00:14:58,916 --> 00:15:01,040 si vous passez à la droite une fois, il serait devenu 10. 332 00:15:01,040 --> 00:15:04,430 Si vous passez vers la droite deux fois, il deviendrait 001. 333 00:15:04,430 --> 00:15:07,590 Et puis si vous passez à nouveau, vous sorte de perdre le bit. 334 00:15:07,590 --> 00:15:09,610 Ouais, ça est juste 0. 335 00:15:09,610 --> 00:15:12,140 Toutes les autres questions à ce sujet? 336 00:15:12,140 --> 00:15:12,835 Oui. 337 00:15:12,835 --> 00:15:14,695 >> AUDIENCE: il devient Alors 000. 338 00:15:14,695 --> 00:15:17,020 >> CAMILLE Rekhson: Oui. 339 00:15:17,020 --> 00:15:22,150 OK, donc nous allons passer par un peu de maths ASCII. 340 00:15:22,150 --> 00:15:25,120 Donc, les personnages peuvent essentiellement être traités comme des entiers 341 00:15:25,120 --> 00:15:28,290 sur la base de leurs valeurs ASCII. 342 00:15:28,290 --> 00:15:35,250 Donc, si nous nous sommes assis int A est égal à 65, l'INT B A plus égale 1, int char c est égal à 343 00:15:35,250 --> 00:15:39,565 D moins 1, et de l'omble D est égal à 68, ce qui serait d'imprimer au fond? 344 00:15:39,565 --> 00:15:46,150 345 00:15:46,150 --> 00:15:49,720 >> Donc, nous sommes l'impression these-- bénisse vous-- nous sommes 346 00:15:49,720 --> 00:15:53,520 imprimer ces tout comme Chars pour cent sur la base du C. 347 00:15:53,520 --> 00:15:56,320 Donc, nous sommes essentiellement imprimer la valeur de caractère de toutes les quatre 348 00:15:56,320 --> 00:15:58,600 de ces variables. 349 00:15:58,600 --> 00:16:04,280 Comme un indice, 65 est la valeur ASCII du capital A. Peut-être que cela a aidé. 350 00:16:04,280 --> 00:16:04,780 Quoi? 351 00:16:04,780 --> 00:16:05,530 >> AUDIENCE: ABCD. 352 00:16:05,530 --> 00:16:07,780 >> CAMILLE Rekhson: Ouais, donc cela imprimer exactement 353 00:16:07,780 --> 00:16:10,290 ABCD parce que nous fixons int Une égale à la valeur ASCII du A. 354 00:16:10,290 --> 00:16:13,085 Donc, si nous imprimons ce que comme un caractère, nous obtenons seulement des capitaux A, 355 00:16:13,085 --> 00:16:15,540 A plus 1 serait un B majuscule en ASCII. 356 00:16:15,540 --> 00:16:19,260 D moins 1 serait un C majuscule en ASCII. 357 00:16:19,260 --> 00:16:25,185 Et 68 est la valeur ASCII de D. Questions sur ASCII? 358 00:16:25,185 --> 00:16:25,685 Oui. 359 00:16:25,685 --> 00:16:31,370 >> Auditoire: Alors, l'guillemets autour A, est-ce que le changement A à l'ASCII? 360 00:16:31,370 --> 00:16:34,456 >> CAMILLE Rekhson: Il uses-- il apostrophes count-- autour de la Une 361 00:16:34,456 --> 00:16:35,330 en fait un caractère. 362 00:16:35,330 --> 00:16:37,600 Et si vous faites affaire avec dans le nombre form-- 363 00:16:37,600 --> 00:16:40,320 Ainsi, lorsque, comme dans ce cas, il est étant traitée comme un int-- 364 00:16:40,320 --> 00:16:44,664 alors il serait traiter avec sa valeur ASCII. 365 00:16:44,664 --> 00:16:45,164 Oui. 366 00:16:45,164 --> 00:16:50,060 >> AUDIENCE: recommandez-vous nous avons une table de référence ASCII? 367 00:16:50,060 --> 00:16:51,900 >> CAMILLE Rekhson: Je ne think-- pas 368 00:16:51,900 --> 00:16:54,720 >> AUDIENCE: Ou serait-il seulement être traiter avec ceux-ci? 369 00:16:54,720 --> 00:16:56,210 >> CAMILLE Rekhson: Je pense que nous le ferait avec des choses faciles. 370 00:16:56,210 --> 00:16:58,168 Je ne pense pas que ce serait mal d'écrire peut-être 371 00:16:58,168 --> 00:17:02,653 ce que le capital A et A sont minuscules, simplement ce que ces gammes commencent avec. 372 00:17:02,653 --> 00:17:05,819 Mais je ne pense pas que vous devez prendre toutes les l'espace pour mettre toute une table ASCII. 373 00:17:05,819 --> 00:17:06,803 Oui. 374 00:17:06,803 --> 00:17:09,755 >> Public: Quelle est la différence entre dire int A et C omble, 375 00:17:09,755 --> 00:17:12,720 comme vous le faites au sommet? 376 00:17:12,720 --> 00:17:17,380 >> CAMILLE Rekhson: Donc, il est juste comment qui est stocké dans la mémoire. 377 00:17:17,380 --> 00:17:20,010 Mais vous pouvez le traiter de toute façon. 378 00:17:20,010 --> 00:17:23,274 Comme nous le voyons ici, nous faisons imprimer le A en tant que caractère. 379 00:17:23,274 --> 00:17:24,690 AUDIENCE: Voilà donc le même que A? 380 00:17:24,690 --> 00:17:25,606 CAMILLE Rekhson: Ouais. 381 00:17:25,606 --> 00:17:28,030 382 00:17:28,030 --> 00:17:29,537 D'autres questions? 383 00:17:29,537 --> 00:17:32,022 >> Auditoire: Alors, pour cent C soit disant imprimer un caractère? 384 00:17:32,022 --> 00:17:33,016 >> CAMILLE Rekhson: Oui. 385 00:17:33,016 --> 00:17:35,501 >> Auditoire: Alors, même si A a seulement été défini comme un nombre entier, 386 00:17:35,501 --> 00:17:37,569 si nous essayons d'imprimer une char comme un 65, il would-- 387 00:17:37,569 --> 00:17:40,110 CAMILLE Rekhson: Ce serait aller à va essentiellement à table ASCII 388 00:17:40,110 --> 00:17:42,990 et obtient quelles que soient les caractères dans le tableau ASCII pour que 65. 389 00:17:42,990 --> 00:17:43,840 >> AUDIENCE: Je vous remercie. 390 00:17:43,840 --> 00:17:44,756 >> CAMILLE Rekhson: Ouais. 391 00:17:44,756 --> 00:17:45,445 Oui? 392 00:17:45,445 --> 00:17:50,620 >> AUDIENCE: Donc, si vous avez% I,% I, % I,% I, serait-il juste print-- 393 00:17:50,620 --> 00:17:52,620 CAMILLE Rekhson: Ouais, si vous avez fait tout ce que je 4%, il 394 00:17:52,620 --> 00:17:57,170 serait imprimer le ASCII valeurs de chacun de ces quatre. 395 00:17:57,170 --> 00:17:59,483 D'autres questions? 396 00:17:59,483 --> 00:18:06,310 OK, donc la portée, essentiellement présent nous aide à déterminer où 397 00:18:06,310 --> 00:18:08,450 une variable existe dans votre programme. 398 00:18:08,450 --> 00:18:11,910 Donc, nous avons parlé de deux différents types de champ, globales et locales. 399 00:18:11,910 --> 00:18:14,560 >> Si une variable est scope globalement, cela signifie que le programme entier 400 00:18:14,560 --> 00:18:16,292 a accès à cette variable. 401 00:18:16,292 --> 00:18:18,000 Et si vous l'échelle mondiale la portée d'une variable, vous 402 00:18:18,000 --> 00:18:19,510 déclarer avant votre fonction principale. 403 00:18:19,510 --> 00:18:20,830 Donc, il est fait dès le départ. 404 00:18:20,830 --> 00:18:22,950 Et puis tout votre programme peut accéder. 405 00:18:22,950 --> 00:18:26,070 >> Si elle est scope seulement localement, que variables confinée à une région spécifique. 406 00:18:26,070 --> 00:18:29,705 Donc, si vous déclarez dans une boucle, seulement que pour la boucle peut y accéder. 407 00:18:29,705 --> 00:18:31,580 Ou si vous déclarez l'intérieur une fonction spécifique, 408 00:18:31,580 --> 00:18:34,940 que cette fonction puisse y accéder. 409 00:18:34,940 --> 00:18:38,265 Questions sur la portée. 410 00:18:38,265 --> 00:18:41,570 >> OK, donc le prototypage de fonctions. 411 00:18:41,570 --> 00:18:45,360 Fondamentalement parce que C, lorsque il compile, lit de haut en bas. 412 00:18:45,360 --> 00:18:48,800 Si vous déclarez une fonction à la fin de votre code, 413 00:18:48,800 --> 00:18:51,670 le compilateur ne sait pas que cette fonction existe. 414 00:18:51,670 --> 00:18:55,690 Donc, ce que nous utilisons sont des prototypes, qui racontent essentiellement le compilateur, 415 00:18:55,690 --> 00:18:58,710 Cette fonction existe, aller chercher pour elle plus tard dans le code. 416 00:18:58,710 --> 00:19:00,900 Ainsi, la manière que vous faites un prototype de fonction 417 00:19:00,900 --> 00:19:03,020 est exactement comment vous commencez hors d'écrire une fonction. 418 00:19:03,020 --> 00:19:05,310 Vous donnez le type de retour, le nom de la fonction, 419 00:19:05,310 --> 00:19:08,930 et puis tous les arguments que cette fonction prend. 420 00:19:08,930 --> 00:19:13,970 >> Donc, à regarder un exemple rapide, dans ce Notre cas de la fonction que nous utilisons ici 421 00:19:13,970 --> 00:19:15,340 est essentiellement une fonction de cube. 422 00:19:15,340 --> 00:19:19,170 Donc, en prenant dans un entier et retourner le cube entier de ce. 423 00:19:19,170 --> 00:19:23,190 Donc, parce que nous avons écrit que fonction ci-dessous la fonction principale, 424 00:19:23,190 --> 00:19:26,300 et nous voulons utiliser la sortie de that-- ou nous 425 00:19:26,300 --> 00:19:28,630 vouloir que la fonction dans notre fonction principale, 426 00:19:28,630 --> 00:19:31,980 nous mettons son chemin prototype au sommet de notre programme. 427 00:19:31,980 --> 00:19:34,460 Et puis, quand nous appelons dans notre fonction principale, 428 00:19:34,460 --> 00:19:38,800 le compilateur sait que cette fonction est écrit plus tard, et ira le chercher, 429 00:19:38,800 --> 00:19:40,910 et va l'utiliser correctement. 430 00:19:40,910 --> 00:19:45,190 Questions sur le prototypage? 431 00:19:45,190 --> 00:19:45,690 Oui. 432 00:19:45,690 --> 00:19:46,940 >> Auditoire: Alors, quel est le point? 433 00:19:46,940 --> 00:19:49,374 434 00:19:49,374 --> 00:19:50,915 Je ne comprends pas le point de prototypage. 435 00:19:50,915 --> 00:19:52,820 Pourquoi ne pas simplement avoir là-bas? 436 00:19:52,820 --> 00:19:54,903 >> CAMILLE Rekhson: Eh bien, si il est ici, alors quand 437 00:19:54,903 --> 00:19:57,020 vous obtenez à la ligne cube de x dans votre fonction principale, 438 00:19:57,020 --> 00:19:59,495 le compilateur aura aucune idée que la fonction de cube existe réellement. 439 00:19:59,495 --> 00:20:01,310 >> AUDIENCE: ne pourriez-vous il suffit de mettre en face? 440 00:20:01,310 --> 00:20:02,350 >> CAMILLE Rekhson: Il est de meilleures pratiques de codage 441 00:20:02,350 --> 00:20:04,150 pour la mettre sous votre fonction principale. 442 00:20:04,150 --> 00:20:06,350 Voilà pourquoi nous le ferions faire du prototypage. 443 00:20:06,350 --> 00:20:07,680 Tout simplement parce que, si vous a eu beaucoup de fonctions, 444 00:20:07,680 --> 00:20:10,180 ce serait vraiment salissant lire toutes ces fonctions 445 00:20:10,180 --> 00:20:12,030 avant de vous rendre à la viande de votre programme. 446 00:20:12,030 --> 00:20:13,888 Ouais, et vous aviez un q-- 447 00:20:13,888 --> 00:20:16,796 >> Auditoire: Alors, est de déclarer votre variable au sommet 448 00:20:16,796 --> 00:20:18,795 de sorte que vous pouvez y accéder, en faire une variable globale? 449 00:20:18,795 --> 00:20:21,119 Est-ce semblable à ce où il est le déclarant 450 00:20:21,119 --> 00:20:23,660 là-haut, de sorte qu'il sait que il va y accéder plus tard 451 00:20:23,660 --> 00:20:24,762 et vous pouvez l'utiliser? 452 00:20:24,762 --> 00:20:26,146 >> CAMILLE Rekhson: Ouais. 453 00:20:26,146 --> 00:20:26,646 Oui. 454 00:20:26,646 --> 00:20:30,414 >> Audience: Si the-- toute supplémentaire fonctions que vous créez clé de l'extérieur 455 00:20:30,414 --> 00:20:31,840 de cette chose, ou-- 456 00:20:31,840 --> 00:20:33,760 >> CAMILLE Rekhson: Ouais, si vous êtes la création d'un autre principale functions-- 457 00:20:33,760 --> 00:20:36,385 lui-même est l'function-- si vous créez d'autres fonctions, 458 00:20:36,385 --> 00:20:37,555 ils devraient être à l'extérieur. 459 00:20:37,555 --> 00:20:38,055 Oui? 460 00:20:38,055 --> 00:20:39,734 >> AUDIENCE: Quel est pour cent D? 461 00:20:39,734 --> 00:20:42,150 CAMILLE Rekhson: Pourcentage D est la même chose que pour cent I. 462 00:20:42,150 --> 00:20:45,915 Elle se réfère à un nombre entier. 463 00:20:45,915 --> 00:20:47,895 Oui. 464 00:20:47,895 --> 00:20:50,370 >> Auditoire: Alors, ce que fait principal int? 465 00:20:50,370 --> 00:20:51,724 Quel était ce vide? 466 00:20:51,724 --> 00:20:53,890 CAMILLE Rekhson: Void dit il faut en aucun argument. 467 00:20:53,890 --> 00:20:55,320 AUDIENCE: [inaudible]. 468 00:20:55,320 --> 00:20:57,570 CAMILLE Rekhson: Pouvez-vous parler un peu plus fort, désolé? 469 00:20:57,570 --> 00:21:00,153 AUDIENCE: Ouais, désolé, pourquoi vous mettez nulle pour le premier, 470 00:21:00,153 --> 00:21:02,297 puis int entrée pour le second? 471 00:21:02,297 --> 00:21:04,720 472 00:21:04,720 --> 00:21:07,470 CAMILLE Rekhson: Oh, pour les deux different-- pour la fonction principale 473 00:21:07,470 --> 00:21:09,290 par rapport à la fonction de cube? 474 00:21:09,290 --> 00:21:13,360 Donc, dans la fonction principale, nous utilisons vide, car il 475 00:21:13,360 --> 00:21:16,870 n'y a pas de paramètres étant prises en. 476 00:21:16,870 --> 00:21:19,425 Alors que dans le cube fonction, nous avons une entrée. 477 00:21:19,425 --> 00:21:22,300 Voilà pourquoi il dit int, entrée, parce qu'il ya des arguments que nous sommes 478 00:21:22,300 --> 00:21:24,571 en prenant en exécuter notre fonction. 479 00:21:24,571 --> 00:21:25,070 Oui. 480 00:21:25,070 --> 00:21:27,770 481 00:21:27,770 --> 00:21:30,464 Y at-il des questions? 482 00:21:30,464 --> 00:21:34,520 >> OK, puis rapidement virgule flottante imprécision. 483 00:21:34,520 --> 00:21:37,200 Donc, nous avons une infinité de nombres réels. 484 00:21:37,200 --> 00:21:38,950 Mais il ya seulement une nombre fini de bits 485 00:21:38,950 --> 00:21:42,880 que nous pouvons utiliser pour afficher les numéros, et les représenter. 486 00:21:42,880 --> 00:21:45,020 Alors nous nous retrouvons avec une certaine imprécision. 487 00:21:45,020 --> 00:21:49,190 Et vos chiffres ne seront pas toujours être très exactement ce que 488 00:21:49,190 --> 00:21:51,810 vous pensez qu'ils sont quand vous êtes face à virgule flottante. 489 00:21:51,810 --> 00:21:53,650 Ceci est juste quelque chose de bon à savoir. 490 00:21:53,650 --> 00:21:56,628 Questions sur ce sujet? 491 00:21:56,628 --> 00:21:59,610 Oui. 492 00:21:59,610 --> 00:22:02,090 >> Public: Est-ce référant à l'idée de dépassement de bits 493 00:22:02,090 --> 00:22:03,089 ce qui était dans la conférence? 494 00:22:03,089 --> 00:22:06,080 Était-ce quelque chose de séparé? 495 00:22:06,080 --> 00:22:09,650 >> CAMILLE Rekhson: Ils sont complètement séparé, ouais. 496 00:22:09,650 --> 00:22:11,160 D'accord, super. 497 00:22:11,160 --> 00:22:16,369 498 00:22:16,369 --> 00:22:17,452 Pulak GOYAL: Salut, tout le monde. 499 00:22:17,452 --> 00:22:19,872 Mon nom est Pulak, et je vais être aller plus pointeurs. 500 00:22:19,872 --> 00:22:23,260 501 00:22:23,260 --> 00:22:25,720 Premier think OK, alors laissez- sur ce qui ressemble à la mémoire. 502 00:22:25,720 --> 00:22:28,610 Donc, comme vous pouvez le voir ici, nous prendre mémoire et nous divisons le haut 503 00:22:28,610 --> 00:22:30,090 dans un tas de blocs. 504 00:22:30,090 --> 00:22:33,150 Et nous référencer chaque bloquer par une adresse, non? 505 00:22:33,150 --> 00:22:37,196 Et ne Quelqu'un se souvient ce type de la notation que nous utilisons pour désigner une adresse? 506 00:22:37,196 --> 00:22:38,510 >> AUDIENCE: hexadécimal, 0X. 507 00:22:38,510 --> 00:22:39,510 >> Pulak GOYAL: hexadécimal, non? 508 00:22:39,510 --> 00:22:41,509 Ainsi, le 0X signifie que nous sommes parler hexadécimal. 509 00:22:41,509 --> 00:22:45,740 510 00:22:45,740 --> 00:22:48,360 OK, alors comment pouvons-nous créer des pointeurs? 511 00:22:48,360 --> 00:22:51,960 Donc, nous prenons le type, nous mis it-- ajouter une étoile à elle, 512 00:22:51,960 --> 00:22:53,760 puis on ajoute le nom de la variable. 513 00:22:53,760 --> 00:22:59,280 Ainsi, les exemples que nous avons vus sont int star du x, char étoiles y et z flotter commencent. 514 00:22:59,280 --> 00:23:01,380 Donc, quand je dis int étoiles x, quelqu'un peut me dire 515 00:23:01,380 --> 00:23:03,965 ce que je suis une sorte de parler de là-bas? 516 00:23:03,965 --> 00:23:05,710 >> PUBLIC: L'emplacement du disque. 517 00:23:05,710 --> 00:23:06,890 >> Pulak GOYAL: Désolé, quoi? 518 00:23:06,890 --> 00:23:07,723 Peux-tu répéter cela? 519 00:23:07,723 --> 00:23:09,250 PUBLIC: L'emplacement de disque. 520 00:23:09,250 --> 00:23:12,390 >> Pulak GOYAL: Donc, si ce actually-- Je voulais dire, est quand nous avons int star du x, 521 00:23:12,390 --> 00:23:14,400 nous disons est la création un pointeur, et 522 00:23:14,400 --> 00:23:17,130 peut stocker l'adresse d'un variable qui est un int, non? 523 00:23:17,130 --> 00:23:21,810 Donc, avec l'omble étoiles y, nous créons un pointeur 524 00:23:21,810 --> 00:23:24,220 qui peut stocker l'adresse d'une variable qui est un produit de carbonisation. 525 00:23:24,220 --> 00:23:26,270 Alors que de sens pour tout le monde? 526 00:23:26,270 --> 00:23:29,600 OK cool 527 00:23:29,600 --> 00:23:33,450 >> OK, donc avec des pointeurs, il ya deux opérations importantes que nous pouvons faire. 528 00:23:33,450 --> 00:23:36,630 Il ya référencement, et il ya déréférencement. 529 00:23:36,630 --> 00:23:37,130 Oui? 530 00:23:37,130 --> 00:23:38,760 >> Public: Pourriez-vous un peu plus lent? 531 00:23:38,760 --> 00:23:39,510 >> Pulak GOYAL: Bien sûr. 532 00:23:39,510 --> 00:23:45,350 Ouais, Ouais so--, poser des questions que je vais si long vous-- si quelque chose est claire. 533 00:23:45,350 --> 00:23:47,240 Donc, nous avons référencement et le déréférencement. 534 00:23:47,240 --> 00:23:51,680 Alors, quand vous voulez pour obtenir l'adresse d'une variable, puis utilisez l'esperluette. 535 00:23:51,680 --> 00:23:53,620 Alors disons que je déclarai int x quelque part. 536 00:23:53,620 --> 00:23:57,450 Et je veux obtenir l'adresse de ce et de le transmettre dans, je ferais esperluette x. 537 00:23:57,450 --> 00:24:01,260 Et lorsque vous voulez obtenir le valeur associée à un pointeur, 538 00:24:01,260 --> 00:24:04,670 vous utilisez le déréférencement opérateur, ce qui est une étoile. 539 00:24:04,670 --> 00:24:08,570 >> Disons donc que je devais int star du x, et Je l'ai eu en montrant quelque chose. 540 00:24:08,570 --> 00:24:13,510 Si je veux obtenir la valeur de ce qu'il est montrant, je voudrais juste faire star du x. 541 00:24:13,510 --> 00:24:14,960 Est-ce clair? 542 00:24:14,960 --> 00:24:16,390 Vous avez des questions à ce sujet? 543 00:24:16,390 --> 00:24:18,129 Oui. 544 00:24:18,129 --> 00:24:25,275 >> Auditoire: Alors, en général, vous ne sera pas capable de faire à x et étoiles 545 00:24:25,275 --> 00:24:27,135 x x avec la même. 546 00:24:27,135 --> 00:24:28,740 Est-ce correct? 547 00:24:28,740 --> 00:24:31,800 En effet, si x est un variable, alors vous avez 548 00:24:31,800 --> 00:24:35,980 à faire à x pour obtenir qu'il est un pointeur. 549 00:24:35,980 --> 00:24:40,810 Mais si x est un pointeur, alors vous avez besoin faire star du x pour obtenir la variable. 550 00:24:40,810 --> 00:24:43,240 >> Pulak GOYAL: Oui, de sorte que le question était de savoir quand 551 00:24:43,240 --> 00:24:45,750 utilisons-nous un moment star-- voulez-vous utiliser l'étoile, 552 00:24:45,750 --> 00:24:47,470 et lorsque nous utilisons le esperluette, et pouvons-nous 553 00:24:47,470 --> 00:24:49,160 utiliser avec le même type de variable? 554 00:24:49,160 --> 00:24:51,810 Donc, en général si vous avez, par exemple, un int x, 555 00:24:51,810 --> 00:24:55,170 vous serait surtout utilisez le esperluette pour obtenir l'adresse de ce. 556 00:24:55,170 --> 00:24:58,220 Parce qu'il ne fait pas logique de déférence dans x. 557 00:24:58,220 --> 00:25:04,220 Considérant que, si nous avions int star du x, vous seriez utilisez opération de déréférencement 558 00:25:04,220 --> 00:25:07,910 car il n'y aurait aucun sens à utiliser à x dans ce cas. 559 00:25:07,910 --> 00:25:09,582 Est-ce que cela a du sens? 560 00:25:09,582 --> 00:25:13,192 >> Auditoire: Alors, vous ne pouvez pas et puis un pointeur? 561 00:25:13,192 --> 00:25:14,900 Pulak GOYAL: Donc vous techniquement, fait 562 00:25:14,900 --> 00:25:16,870 peut faire l'esperluette d'un pointeur. 563 00:25:16,870 --> 00:25:18,984 Mais ce qui sort de la champ d'application de cette classe. 564 00:25:18,984 --> 00:25:21,900 Pour la purpose-- pour vos gars » fins, lorsque vous avez des pointeurs, 565 00:25:21,900 --> 00:25:25,191 vous voulez utiliser l'opérateur de déréférencement pour obtenir la valeur associée à ce. 566 00:25:25,191 --> 00:25:27,380 Et quand vous avez régulière les variables, comme un int x, 567 00:25:27,380 --> 00:25:31,410 vous voulez utiliser l'esperluette opérateur pour obtenir l'adresse de ce. 568 00:25:31,410 --> 00:25:31,910 D'accord? 569 00:25:31,910 --> 00:25:35,670 570 00:25:35,670 --> 00:25:38,850 >> OK, donc regardons pointeurs et ce qui se passe sous le capot. 571 00:25:38,850 --> 00:25:42,640 Donc la première chose que je faisais ici l'int x déclarée est égale à cinq. 572 00:25:42,640 --> 00:25:48,460 L'adresse de cette variable est 0x04, et la valeur est 5. 573 00:25:48,460 --> 00:25:52,940 Voyons donc ce qui se passe avec la ligne suivante. 574 00:25:52,940 --> 00:25:55,130 Alors maintenant, nous déclarons un pointeur. 575 00:25:55,130 --> 00:26:01,450 Son adresse est 0x08, et son valeur est l'adresse de x. 576 00:26:01,450 --> 00:26:05,220 Cela fait-il sens pour tout le monde? 577 00:26:05,220 --> 00:26:06,507 Vous avez des questions à ce sujet? 578 00:26:06,507 --> 00:26:09,130 579 00:26:09,130 --> 00:26:13,080 >> OK, et maintenant nous allons voir ce que qui se passe avec la ligne suivante. 580 00:26:13,080 --> 00:26:18,140 Donc, avec cette ligne suivante, nous avons l'adresse de copie étant 0x10, 581 00:26:18,140 --> 00:26:20,780 et sa valeur est 5. 582 00:26:20,780 --> 00:26:23,570 Donc, la raison pour laquelle nous avons obtenu cinq est que nous avons dit, nous déréférencer 583 00:26:23,570 --> 00:26:26,740 pointeur, ce qui nous avons déclaré un int étoiles. 584 00:26:26,740 --> 00:26:35,797 Et il went-- quand nous déréférencer, il dit, OK, ce qui est dans le 0x04 de fente. 585 00:26:35,797 --> 00:26:36,630 Et il est allé à cela. 586 00:26:36,630 --> 00:26:40,785 Et ce que x est un x0-- 0x04, et la valeur est 5. 587 00:26:40,785 --> 00:26:41,660 Cela a-t-il du sens? 588 00:26:41,660 --> 00:26:42,334 Oui? 589 00:26:42,334 --> 00:26:50,090 >> Public: Pourquoi est l'adresse de la copie seulement 4 octets au-dessus du pointeur x? 590 00:26:50,090 --> 00:26:52,318 >> Pulak GOYAL: Oui, cela est une erreur on-- 591 00:26:52,318 --> 00:26:55,304 >> CAMILLE Rekhson: Donc, oui, souvenez- cela est écrit en hexadécimal. 592 00:26:55,304 --> 00:26:56,220 Pulak GOYAL: Oh, oui. 593 00:26:56,220 --> 00:26:58,615 CAMILLE Rekhson: Donc, ce est en fait 8 puis 16 594 00:26:58,615 --> 00:27:00,960 parce que nous avons dit que, le pointeur, rappelez-vous, 595 00:27:00,960 --> 00:27:05,330 dans notre IDE va ​​être long de 8 octets. 596 00:27:05,330 --> 00:27:06,080 Pulak GOYAL: Ouais. 597 00:27:06,080 --> 00:27:09,160 598 00:27:09,160 --> 00:27:12,540 Donc, juste pour être clair, pointeurs sont 8 octets de long. 599 00:27:12,540 --> 00:27:14,160 Un int est de 4 octets. 600 00:27:14,160 --> 00:27:18,380 Donc la raison pour laquelle ce sauté de 0x04 à 0x08 601 00:27:18,380 --> 00:27:20,980 est parce que nous devions faire un saut de 8 octets. 602 00:27:20,980 --> 00:27:24,396 Et puis depuis pour-- copie est juste un int, 603 00:27:24,396 --> 00:27:26,020 il est 4 octets, ce qui est la moitié de 8 octets. 604 00:27:26,020 --> 00:27:29,970 Nous avons donc simplement sauter à 0x10, qui est deux loin de 0x08. 605 00:27:29,970 --> 00:27:33,100 606 00:27:33,100 --> 00:27:34,570 D'autres questions? 607 00:27:34,570 --> 00:27:36,850 OK, let's-- ouais? 608 00:27:36,850 --> 00:27:39,245 >> Public: Pourquoi pas la valeur du int copie 609 00:27:39,245 --> 00:27:45,000 juste the-- pourquoi est-ce 5 au lieu de 0x04? 610 00:27:45,000 --> 00:27:46,270 >> Pulak GOYAL: OK, pourquoi est-ce 5? 611 00:27:46,270 --> 00:27:51,600 OK, donc quand the-- sorte de laissez-première réfléchir en termes de types. 612 00:27:51,600 --> 00:27:55,600 Donc, je dis int copie est égal à pointeur étoiles. 613 00:27:55,600 --> 00:27:57,490 Alors, quel est le type de pointeur? 614 00:27:57,490 --> 00:27:59,310 Il est un int étoiles. 615 00:27:59,310 --> 00:28:03,850 Et quand je déréférence cela, le type devient un int. 616 00:28:03,850 --> 00:28:06,570 Donc, ce que nous attendons pour stocker ici est en fait un int. 617 00:28:06,570 --> 00:28:07,965 Cela a-t-il du sens? 618 00:28:07,965 --> 00:28:09,090 AUDIENCE: Bien sûr, peu. 619 00:28:09,090 --> 00:28:11,465 Pulak GOYAL: Donc, généralement lorsque vous pensez en termes de types, 620 00:28:11,465 --> 00:28:15,607 Il vous aide à comprendre quelle est la type de la valeur qui devrait y aller. 621 00:28:15,607 --> 00:28:17,940 Ainsi, vous pouvez généralement exclure beaucoup de ces erreurs courantes 622 00:28:17,940 --> 00:28:21,790 en pensant en termes de types. 623 00:28:21,790 --> 00:28:23,612 Permettez-moi de passer par un peu plus de diapositives. 624 00:28:23,612 --> 00:28:26,070 Et nous pouvons obtenir des questions à la fin de la section de pointeur. 625 00:28:26,070 --> 00:28:28,910 626 00:28:28,910 --> 00:28:32,290 OK, donc nous avons un programme de poussette ici. 627 00:28:32,290 --> 00:28:35,460 Et donc ne anyone-- quelqu'un peut dire moi ce qui ne va pas avec ce programme? 628 00:28:35,460 --> 00:28:39,000 629 00:28:39,000 --> 00:28:40,820 Bon, alors ce que nous sommes attendant à faire ici 630 00:28:40,820 --> 00:28:44,520 est-- ce que nous voulons faire est de prendre la variable int x 631 00:28:44,520 --> 00:28:48,350 et tournez it-- rendre égal 5 au lieu de 3, puis imprimer cela. 632 00:28:48,350 --> 00:28:49,640 Mais cela ne se passe. 633 00:28:49,640 --> 00:28:50,950 Quelqu'un peut me dire pourquoi? 634 00:28:50,950 --> 00:28:51,934 Oui? 635 00:28:51,934 --> 00:28:54,840 >> AUDIENCE: Lorsque la fonction to_five prend x car il est l'argument, 636 00:28:54,840 --> 00:28:58,130 elle ne prend pas x elle-même, mais la place crée une copie, un, de celui-ci. 637 00:28:58,130 --> 00:29:00,115 Et il forme des opérations sur ce point. 638 00:29:00,115 --> 00:29:02,614 Mais à cause de cela, vous ne faites pas changer la valeur réelle de x. 639 00:29:02,614 --> 00:29:03,970 Puisque vous êtes [inaudible]. 640 00:29:03,970 --> 00:29:07,950 >> Pulak GOYAL: Droit, droite, donc quand nous appelons 641 00:29:07,950 --> 00:29:10,100 to_five la fonction, ce qui nous faisons est de penser, 642 00:29:10,100 --> 00:29:12,550 me donner une copie de la de la valeur à cette fonction. 643 00:29:12,550 --> 00:29:16,010 Cette fonction, alors, va et de faire quelques manipulations. 644 00:29:16,010 --> 00:29:21,260 Mais une fois qu'il revient, il est maintenant hors du champ d'application de la fonction principale ici. 645 00:29:21,260 --> 00:29:24,750 Et si x est toujours, en fait, égal à 3, et nous imprimons 3. 646 00:29:24,750 --> 00:29:26,445 OK, donc nous allons voir comment cela se passe. 647 00:29:26,445 --> 00:29:29,430 648 00:29:29,430 --> 00:29:31,180 >> OK, donc il n'y a rien déclaré. 649 00:29:31,180 --> 00:29:34,490 Ensuite, ici, x est égal à 3. 650 00:29:34,490 --> 00:29:40,820 Et maintenant, il est-- à la position deux, un est toujours pas dans la portée. 651 00:29:40,820 --> 00:29:46,790 Et maintenant, nous allons à positionner trois, où un assume maintenant la valeur de 3. 652 00:29:46,790 --> 00:29:49,380 A quatre, nous changeons maintenant à 5. 653 00:29:49,380 --> 00:29:53,290 Mais maintenant, quand nous revenir au cinq, ce qui est la déclaration d'impression, 654 00:29:53,290 --> 00:29:55,380 un est maintenant hors de portée. 655 00:29:55,380 --> 00:29:57,450 Et X est toujours égal à 3. 656 00:29:57,450 --> 00:29:59,700 Cela fait-il sens pour tout le monde? 657 00:29:59,700 --> 00:30:03,010 OK, nous allons donc maintenant nous allons parler de la façon dont nous pouvons utiliser des pointeurs pour résoudre ce problème. 658 00:30:03,010 --> 00:30:06,140 Est-ce que quelqu'un a des idées comment nous pourrait résoudre ce problème en utilisant des pointeurs? 659 00:30:06,140 --> 00:30:08,710 660 00:30:08,710 --> 00:30:11,490 >> AUDIENCE: Vous prenez en un int étoiles à la place d'un int pour to_five. 661 00:30:11,490 --> 00:30:12,530 >> Pulak GOYAL: Désolé, pourriez-vous parler? 662 00:30:12,530 --> 00:30:15,266 >> AUDIENCE: Vous prenez en un int étoiles à la place d'un int pour to_five. 663 00:30:15,266 --> 00:30:16,140 Pulak GOYAL: OK, oui. 664 00:30:16,140 --> 00:30:20,250 Donc, nous allons pass-- au lieu de passer tout simplement la valeur, Passons par référence. 665 00:30:20,250 --> 00:30:21,690 Cette nouvelle fonction, non? 666 00:30:21,690 --> 00:30:25,210 Et en passant l'adresse, nous avons peut faire des manipulations sur l'adresse. 667 00:30:25,210 --> 00:30:27,400 Et si nous sommes réellement, en fait, changer x. 668 00:30:27,400 --> 00:30:30,570 Donc, nous allons voir comment ça fonctionne. 669 00:30:30,570 --> 00:30:32,950 >> OK, donc dans cet exemple nous l'avons fixé. 670 00:30:32,950 --> 00:30:38,000 Nous avons changé notre signature de to_five à prendre dans un int 671 00:30:38,000 --> 00:30:40,540 étoile au lieu de simplement un int ici. 672 00:30:40,540 --> 00:30:45,470 Ensuite, nous déréférencer ce et attribuer un 5 à elle. 673 00:30:45,470 --> 00:30:48,090 Et maintenant, cette volonté, en fait, imprimer 5. 674 00:30:48,090 --> 00:30:51,960 Donc, nous allons voir comment les étapes travaillent ici. 675 00:30:51,960 --> 00:30:55,200 >> Donc, avec la première étape, il n'y a rien encore déclaré. 676 00:30:55,200 --> 00:31:00,140 Donc, ici, à la deuxième étape, nous l'avons dit x est égal à 3, 677 00:31:00,140 --> 00:31:03,970 mais est encore hors de portée. 678 00:31:03,970 --> 00:31:08,100 Maintenant, par la troisième ligne, nous avons x est toujours égal à trois. 679 00:31:08,100 --> 00:31:14,150 Et maintenant, nous avons passé in-- ce qui est stockée dans un est maintenant l'adresse de x. 680 00:31:14,150 --> 00:31:16,760 Cela fait-il sens pour tout le monde, comment nous sommes arrivés là? 681 00:31:16,760 --> 00:31:21,470 Droite, nous avons le amper-- voilà comment nous avons passé une esperluette x à la fonction 682 00:31:21,470 --> 00:31:23,040 to_five. 683 00:31:23,040 --> 00:31:30,330 Ensuite, à la ligne suivante, ce qui nous faisons, est que nous déréférencer un. 684 00:31:30,330 --> 00:31:36,120 >> Et par un déréférencement, nous sommes en mesure pour modifier la valeur de x à partir de 3 à 5. 685 00:31:36,120 --> 00:31:38,560 Parce x vit à cette adresse 0x12. 686 00:31:38,560 --> 00:31:42,440 687 00:31:42,440 --> 00:31:45,810 Et puis, enfin, quand nous retournons au principal, 688 00:31:45,810 --> 00:31:50,570 Bien que cette une est maintenant hors de champ d'application, nous avons, en fait, changé x. 689 00:31:50,570 --> 00:31:51,570 Et il est 5. 690 00:31:51,570 --> 00:31:55,160 Vous avez des questions à ce sujet? 691 00:31:55,160 --> 00:31:56,036 Oui? 692 00:31:56,036 --> 00:31:58,185 >> AUDIENCE: Pouvez-vous me dire ce que l'esperluette x était? 693 00:31:58,185 --> 00:32:00,004 Je pensais esperluette était comme ET. 694 00:32:00,004 --> 00:32:03,480 695 00:32:03,480 --> 00:32:07,210 >> Pulak GOYAL: Oui, si nous utilisons les mêmes symbole pour beaucoup de choses différentes. 696 00:32:07,210 --> 00:32:11,470 Donc, ici, quand vous en have-- ce cas, lorsque vous avez, 697 00:32:11,470 --> 00:32:19,380 Je guess-- dans ce cas, lorsque vous avez affaire à des pointeurs, 698 00:32:19,380 --> 00:32:23,640 quand vous mettez l'esperluette devant d'un int, une variable int, ou d'un char, 699 00:32:23,640 --> 00:32:28,609 ou un flux, ce que vous dites est, donnez-moi l'adresse de cette. 700 00:32:28,609 --> 00:32:31,900 Mais ce que vous pensiez, quand le monde vous devez utiliser esperluette est, disons, 701 00:32:31,900 --> 00:32:33,180 dans une instruction if. 702 00:32:33,180 --> 00:32:39,256 Vous avez un vrai, et certaines variables qui évaluent à quelque booléenne, 703 00:32:39,256 --> 00:32:41,380 et quelques autres variables que valider certaines booléenne 704 00:32:41,380 --> 00:32:42,880 et vous voulez obtenir le et de cela. 705 00:32:42,880 --> 00:32:44,552 Ensuite, vous pouvez utiliser l'esperluette. 706 00:32:44,552 --> 00:32:47,510 ENCEINTE 1: Ouais, donc seulement aujourd'hui, nous avons parlé de trois utilisations différentes 707 00:32:47,510 --> 00:32:48,250 de esperluette. 708 00:32:48,250 --> 00:32:51,040 Nous avons deux esperluette, qui est ce Pulak vient de décrire. 709 00:32:51,040 --> 00:32:53,420 Nous avons une esperluette, qui ce qui est décrit Camille 710 00:32:53,420 --> 00:32:54,897 plus tôt, qui est l'une esperluette. 711 00:32:54,897 --> 00:32:56,685 Et voilà pour bit à bit. 712 00:32:56,685 --> 00:32:59,640 Et remarquez que les deux et-- conditionnelle ou, désolé, 713 00:32:59,640 --> 00:33:04,180 ET logique bit à bit et ET, ceux-ci ont deux nombres, non? 714 00:33:04,180 --> 00:33:07,354 Il a été quelque chose de esperluette quelque chose esperluette, 715 00:33:07,354 --> 00:33:09,350 quelque chose de quelque chose esperluette. 716 00:33:09,350 --> 00:33:13,862 Ici, quand nous avons juste esperluette quelque chose, que ça déréférencement. 717 00:33:13,862 --> 00:33:15,830 >> Pulak GOYAL: Ouais, bonne question. 718 00:33:15,830 --> 00:33:16,677 Oui. 719 00:33:16,677 --> 00:33:21,150 >> Public: Pourquoi en ligne 5a et étoile à devenir N / A? 720 00:33:21,150 --> 00:33:25,520 Pourquoi ont-ils juste genre de conservent pas le mêmes valeurs de la ligne précédente? 721 00:33:25,520 --> 00:33:28,000 >> Pulak GOYAL: Parce que nous avons liquidé la fonction. 722 00:33:28,000 --> 00:33:30,894 Et qu'est-ce happens-- afin what-- maintenant nous sommes 723 00:33:30,894 --> 00:33:33,060 hors de portée de cette fonction, ce qui se passe réellement 724 00:33:33,060 --> 00:33:37,770 est retiré de ceux-ci sont mémoire. 725 00:33:37,770 --> 00:33:38,808 Oui. 726 00:33:38,808 --> 00:33:42,982 >> AUDIENCE: Entre 3 ou 4 étoiles A est égal à 5. 727 00:33:42,982 --> 00:33:43,690 Pulak GOYAL: Oui. 728 00:33:43,690 --> 00:33:45,575 Public: Qu'est-ce que représentent exactement? 729 00:33:45,575 --> 00:33:46,950 Pulak GOYAL: Qu'est-ce que cela signifie? 730 00:33:46,950 --> 00:33:47,380 AUDIENCE: Ouais. 731 00:33:47,380 --> 00:33:49,088 Pulak GOYAL: Donc, le question était, ce qui est 732 00:33:49,088 --> 00:33:52,300 that-- que faites-vous en ligne quand nous disons, étoile est égal à 5? 733 00:33:52,300 --> 00:33:55,210 Alors rappelez-vous la star de la opérateur de déréférencement. 734 00:33:55,210 --> 00:33:58,640 Alors, quand un, dans ce cas, est un pointeur. 735 00:33:58,640 --> 00:34:00,030 Il est un int étoiles. 736 00:34:00,030 --> 00:34:03,710 Alors, quand nous déréférencer un par en utilisant l'étoile, ce que nous disons 737 00:34:03,710 --> 00:34:11,250 est, aller à tout ce qui est stocké à la adresse, stockée dans a-- afin take-- donc un, 738 00:34:11,250 --> 00:34:13,280 en ce moment, a une certaine Adresse stockées. 739 00:34:13,280 --> 00:34:19,920 Allez là où ce que les points d'adresse à, et Aujourd'hui, le changement quel qu'il soit à cinq. 740 00:34:19,920 --> 00:34:20,420 Oui. 741 00:34:20,420 --> 00:34:23,390 >> AUDIENCE: Pouvez-vous dire en termes plus simples? 742 00:34:23,390 --> 00:34:27,360 Changer l'adresse d'un à 5. 743 00:34:27,360 --> 00:34:31,070 >> Pulak GOYAL: Nous ne sommes pas modification de l'adresse d'un à cinq. 744 00:34:31,070 --> 00:34:36,340 A a une certaine adresse en elle, qui est la adresse de la variable d'intérêt. 745 00:34:36,340 --> 00:34:39,570 Et ce que nous disons quand nous déréférencement est, 746 00:34:39,570 --> 00:34:42,630 maintenant nous voulons change-- nous sommes maintenant référencement 747 00:34:42,630 --> 00:34:45,135 l'intérêt directement de la variable. 748 00:34:45,135 --> 00:34:48,499 Est-ce que cela a du sens? 749 00:34:48,499 --> 00:34:52,280 >> ENCEINTE 1: Une autre façon de penser de celui-ci est donc un go-- est une adresse. 750 00:34:52,280 --> 00:34:55,310 La star dit aller à ce aborder et examiner sa valeur. 751 00:34:55,310 --> 00:34:58,000 Et maintenant définir sa valeur à 5. 752 00:34:58,000 --> 00:35:00,920 Donc, il est dit, aller à la adresse de x, qui 753 00:35:00,920 --> 00:35:05,720 va être ce qui est stocké dans un, et de les modifier à 5. 754 00:35:05,720 --> 00:35:06,470 Pulak GOYAL: Ouais? 755 00:35:06,470 --> 00:35:10,817 Auditoire: Alors, où est la position le pointeur va, l'adresse. 756 00:35:10,817 --> 00:35:14,270 Mais la valeur est affectée d'un valeur sur la base de l'adresse. 757 00:35:14,270 --> 00:35:15,020 Pulak GOYAL: Ouais. 758 00:35:15,020 --> 00:35:18,076 759 00:35:18,076 --> 00:35:19,367 Toutes les autres questions à ce sujet? 760 00:35:19,367 --> 00:35:22,774 761 00:35:22,774 --> 00:35:23,940 AUDIENCE: Je ai une question. 762 00:35:23,940 --> 00:35:25,664 Pulak GOYAL: Ouais, désolé. 763 00:35:25,664 --> 00:35:30,324 Auditoire: Alors, quand vous store-- sorte si vous dites [inaudible] a. 764 00:35:30,324 --> 00:35:31,032 Pulak GOYAL: Oui. 765 00:35:31,032 --> 00:35:34,448 Public: Avez-vous de stocker le x par une esperluette? 766 00:35:34,448 --> 00:35:37,376 Pourquoi ne pas simplement dire x avant votre int [inaudible]? 767 00:35:37,376 --> 00:35:40,562 768 00:35:40,562 --> 00:35:41,270 Pulak GOYAL: So-- 769 00:35:41,270 --> 00:35:42,090 AUDIENCE: [inaudible]. 770 00:35:42,090 --> 00:35:43,673 Pulak GOYAL: est donc votre question-- oh. 771 00:35:43,673 --> 00:35:47,160 772 00:35:47,160 --> 00:35:51,300 Donc, votre question est, pourquoi ne peut pas nous-- à la fonction to_five, pourquoi pas nous 773 00:35:51,300 --> 00:35:52,590 il suffit de passer un x, non? 774 00:35:52,590 --> 00:35:53,570 >> AUDIENCE: Droit. 775 00:35:53,570 --> 00:35:59,570 >> Pulak GOYAL: OK, ouais, donc ce nouveau remonte à notre discussion sur les types. 776 00:35:59,570 --> 00:36:06,080 Donc la fonction est maintenant to_five attend un type de int étoiles. 777 00:36:06,080 --> 00:36:07,660 Alors, quel est le type de x? 778 00:36:07,660 --> 00:36:09,800 X est juste un int. 779 00:36:09,800 --> 00:36:13,530 Mais ce que cette fonction attend est un int étoiles. 780 00:36:13,530 --> 00:36:16,910 Donc, il attend une variable a une adresse mémorisée en elle. 781 00:36:16,910 --> 00:36:20,250 Voilà donc comment mettre le vous-- esperluette, et ainsi qui est 782 00:36:20,250 --> 00:36:22,560 comment nous passons dans le adresse, qui est maintenant-- 783 00:36:22,560 --> 00:36:25,120 et qui interprète que comme un int étoiles, ouais. 784 00:36:25,120 --> 00:36:26,700 Grande question. 785 00:36:26,700 --> 00:36:29,300 Toutes les autres questions à ce sujet? 786 00:36:29,300 --> 00:36:29,800 OK cool. 787 00:36:29,800 --> 00:36:32,870 788 00:36:32,870 --> 00:36:37,020 >> OK, nous allons donc maintenant nous allons parler à propos de l'arithmétique de pointeur. 789 00:36:37,020 --> 00:36:40,050 Donc, ici, additionner et soustraire i ajuste le pointeur 790 00:36:40,050 --> 00:36:43,950 par i fois la taille de le type d'octets de pointeur. 791 00:36:43,950 --> 00:36:46,170 Alors regardons comment ça ressemble. 792 00:36:46,170 --> 00:36:49,640 Donc, ici, nous avons déclaré x est égal à un entier 5. 793 00:36:49,640 --> 00:36:56,120 Et maintenant, nous allons déclarer un pointeur y et passez dans l'adresse de x-bas. 794 00:36:56,120 --> 00:36:58,910 Alors que nous avons. 795 00:36:58,910 --> 00:37:01,005 Donc x est stocké à 0x04. 796 00:37:01,005 --> 00:37:03,960 Maintenant, y est égal à cela. 797 00:37:03,960 --> 00:37:12,260 Et quelqu'un peut me dire ce qu'ils en pensent qui va se passer quand nous le faisons, plus y est égal à 1? 798 00:37:12,260 --> 00:37:19,100 799 00:37:19,100 --> 00:37:19,771 Oui? 800 00:37:19,771 --> 00:37:24,010 >> AUDIENCE: cela va changer à 0 fois 0 8? 801 00:37:24,010 --> 00:37:25,342 >> Pulak GOYAL: Taille et bien-- 802 00:37:25,342 --> 00:37:27,789 >> AUDIENCE: vous vous déplacez l'adresse. 803 00:37:27,789 --> 00:37:29,080 Pulak GOYAL: Ouais il était-- oui. 804 00:37:29,080 --> 00:37:31,130 So-- droit. 805 00:37:31,130 --> 00:37:33,110 Il va donc changer de 0x08. 806 00:37:33,110 --> 00:37:38,750 Et because-- donc vous devriez utiliser cette formule, 1 fois la taille du pointeur 807 00:37:38,750 --> 00:37:42,354 et les pointeurs sont de size-- 808 00:37:42,354 --> 00:37:44,050 >> [ÉTUDIANTS MURMUR] 809 00:37:44,050 --> 00:37:45,190 >> Pulak GOYAL: Droit. 810 00:37:45,190 --> 00:37:46,150 >> [ÉTUDIANTS MURMUR] 811 00:37:46,150 --> 00:37:49,230 >> ENCEINTE 1: Alors que le type le pointeur to-- 812 00:37:49,230 --> 00:37:51,862 >> Pulak GOYAL: Est, ouais, ouais, ça fait 4 octets. 813 00:37:51,862 --> 00:37:53,930 >> ENCEINTE 1: Alors ints sont 4 octets. 814 00:37:53,930 --> 00:38:01,260 >> Pulak Goyal: Donc, si nous avions a-- Disons disons que nous avons déclaré, je suppose, un caractère. 815 00:38:01,260 --> 00:38:06,830 Qu'est-ce qui that-- alors disons nous avoir x carbonisé à une ou quelque chose. 816 00:38:06,830 --> 00:38:14,400 Et nous avons eu l'adresse de ce à 0x04, ce serait y est égal à 1, plus faire maintenant? 817 00:38:14,400 --> 00:38:14,960 Pardon quoi? 818 00:38:14,960 --> 00:38:16,099 >> AUDIENCE: 0x05. 819 00:38:16,099 --> 00:38:17,140 Pulak GOYAL: 0x05, à droite. 820 00:38:17,140 --> 00:38:18,520 Est-ce que tout le monde voit ça? 821 00:38:18,520 --> 00:38:20,212 OK, et maintenant, disons qu'il est un flotteur. 822 00:38:20,212 --> 00:38:20,962 Ce qui se passerait? 823 00:38:20,962 --> 00:38:25,210 824 00:38:25,210 --> 00:38:26,130 N'importe qui? 825 00:38:26,130 --> 00:38:28,066 Donc flotteurs sont combien d'octets? 826 00:38:28,066 --> 00:38:28,860 >> Public: 4 octets. 827 00:38:28,860 --> 00:38:29,651 >> Pulak GOYAL: Droit. 828 00:38:29,651 --> 00:38:32,661 Donc, ce serait la même chose que cela. 829 00:38:32,661 --> 00:38:33,160 Bien. 830 00:38:33,160 --> 00:38:36,230 831 00:38:36,230 --> 00:38:40,180 OK, et maintenant nous allons parler à propos de pointeurs et les tableaux. 832 00:38:40,180 --> 00:38:44,210 Donc, vous avez vu ce sur la deux ensembles précédents p, 833 00:38:44,210 --> 00:38:48,570 où nous pouvons treat-- tableaux et donc pointeurs ne sont pas la même chose. 834 00:38:48,570 --> 00:38:51,170 Mais nous pouvons traiter les tableaux comme des pointeurs. 835 00:38:51,170 --> 00:38:55,550 Donc, ici, nous avons ce tableau ici, qui dispose de trois emplacements. 836 00:38:55,550 --> 00:38:57,570 Dans la première, nous slot-- avoir une, deux et trois. 837 00:38:57,570 --> 00:39:00,930 >> Donc, si nous-- afin que nous puissions attribuer en disant, nous avons tableau, 838 00:39:00,930 --> 00:39:02,080 déréférence cela. 839 00:39:02,080 --> 00:39:04,579 Et puis quand nous déréférencer que, ce que nous faisons réellement 840 00:39:04,579 --> 00:39:05,910 se réfère à la même fente. 841 00:39:05,910 --> 00:39:09,230 Donc tableau étoiles est égal à 1. 842 00:39:09,230 --> 00:39:11,020 Nous could- comment pourrait- nous écrivons that-- ce qui est 843 00:39:11,020 --> 00:39:13,404 une autre façon nous pourrions écrire cela? 844 00:39:13,404 --> 00:39:14,840 >> AUDIENCE: Array 0 égal à 1. 845 00:39:14,840 --> 00:39:17,100 >> Pulak GOYAL: Exactement, tout le monde ne voit que? 846 00:39:17,100 --> 00:39:18,320 Donc même chose ici. 847 00:39:18,320 --> 00:39:24,060 Alors, quand nous avons tableau plus 1, nous do-- afin even-- 848 00:39:24,060 --> 00:39:28,890 rappeler avec l'arithmétique que nous venons de parler, quand nous faisons plus 1 849 00:39:28,890 --> 00:39:32,120 ou le déplacer sur de 4 octets, à droite. 850 00:39:32,120 --> 00:39:33,170 Est-ce que tout le monde voit ça? 851 00:39:33,170 --> 00:39:35,753 Et de ce côté, quand nous déréférencer que nous pouvons mettre cela à 2. 852 00:39:35,753 --> 00:39:37,710 Et voilà comment nous fixons le prochain bloc à deux. 853 00:39:37,710 --> 00:39:41,640 Et donc une autre façon d'écrire ce serait aussi le support de tableau 854 00:39:41,640 --> 00:39:44,436 0 support est égal à 1. 855 00:39:44,436 --> 00:39:47,070 >> Public: Avez-vous besoin des parenthèses? 856 00:39:47,070 --> 00:39:50,840 >> Pulak GOYAL: Oui, parce que vous êtes déréférencement la quantité totale 857 00:39:50,840 --> 00:39:53,460 tableau plus 1. 858 00:39:53,460 --> 00:39:56,829 OK, et même chose pour un tableau plus 2. 859 00:39:56,829 --> 00:39:57,870 Vous avez des questions à ce sujet? 860 00:39:57,870 --> 00:39:58,369 Oui. 861 00:39:58,369 --> 00:40:01,340 Auditoire: Alors tableau est automatiquement fixé à 0? 862 00:40:01,340 --> 00:40:03,054 >> Pulak GOYAL: Array est-- désolé, quoi? 863 00:40:03,054 --> 00:40:03,962 >> AUDIENCE: Array est 0. 864 00:40:03,962 --> 00:40:07,140 L'adresse de la gamme est juste 0. 865 00:40:07,140 --> 00:40:10,200 >> Pulak GOYAL: Donc la question était, est l'adresse du tableau juste 0? 866 00:40:10,200 --> 00:40:11,950 Donc, non, tableau a une certaine adresse. 867 00:40:11,950 --> 00:40:14,930 Alors, quand nous déréférencer, that's-- de sorte que vous pouvez penser about-- 868 00:40:14,930 --> 00:40:18,230 littéralement comme un pointeur pointant au début d'un tableau. 869 00:40:18,230 --> 00:40:19,390 Alors qui a une certaine adresse. 870 00:40:19,390 --> 00:40:20,580 Nous ne savons pas ce qu'il est. 871 00:40:20,580 --> 00:40:24,170 Mais quand nous déréférencer, nous savons qui est le début de la matrice. 872 00:40:24,170 --> 00:40:25,980 Et quand nous nous déplaçons par 1, nous ne faisons que déplacer 873 00:40:25,980 --> 00:40:29,090 par rapport à l'endroit où était cette adresse. 874 00:40:29,090 --> 00:40:30,480 D'autres questions? 875 00:40:30,480 --> 00:40:31,419 Oui? 876 00:40:31,419 --> 00:40:35,559 >> AUDIENCE: Donc, si vous faites support de tableau, plus 1-- 877 00:40:35,559 --> 00:40:37,350 Pulak GOYAL: Désolé, I-- pourrait vous parler? 878 00:40:37,350 --> 00:40:41,174 AUDIENCE: Ouais, si vous faites support de tableau [inaudible]. 879 00:40:41,174 --> 00:40:45,227 Alors si vous mettez le pointer-- 880 00:40:45,227 --> 00:40:46,810 Pulak GOYAL: Désolé, je ne peux pas vous entendre. 881 00:40:46,810 --> 00:40:48,100 Pouvez-vous dire une fois de plus? 882 00:40:48,100 --> 00:40:49,470 >> Public: Vous êtes OK. 883 00:40:49,470 --> 00:40:50,870 >> Pulak GOYAL: OK, désolé. 884 00:40:50,870 --> 00:40:51,420 OK cool. 885 00:40:51,420 --> 00:40:52,200 Any-- ouais. 886 00:40:52,200 --> 00:40:55,710 Donc, quand vous allez dans le support de tableau 3-- 887 00:40:55,710 --> 00:40:56,570 >> Pulak GOYAL: Ouais. 888 00:40:56,570 --> 00:40:59,832 >> AUDIENCE: --isn't there-- ne serait pas il soit quatre taches comme 0, 1, 2, 3 et? 889 00:40:59,832 --> 00:41:02,630 Pourquoi est-il pas int tableau 2? 890 00:41:02,630 --> 00:41:07,850 >> Pulak GOYAL: Non, si juste la convention C est-- quand nous déclarons le tableau, 891 00:41:07,850 --> 00:41:12,010 nous-- le nombre que nous y mettons est le nombre d'emplacements que nous voulons. 892 00:41:12,010 --> 00:41:16,970 Mais les indices du tableau sont effectivement tableau 0, tableau 1 et tableau 2. 893 00:41:16,970 --> 00:41:19,780 Donc, il est tout simplement la convention sur la façon dont nous avons la déclaration de tableaux. 894 00:41:19,780 --> 00:41:20,880 Ouais, d'autres questions? 895 00:41:20,880 --> 00:41:21,380 Oui. 896 00:41:21,380 --> 00:41:23,750 Auditoire: Alors, nous sommes toujours parler de pointeurs, non? 897 00:41:23,750 --> 00:41:24,500 Pulak GOYAL: Ouais. 898 00:41:24,500 --> 00:41:28,600 Public: Pourriez-vous faire encore STAR pour tableau 0 est égal à 1? 899 00:41:28,600 --> 00:41:32,870 Pulak GOYAL: Non, non, so-- OK, donc la question était pouvait 900 00:41:32,870 --> 00:41:37,370 vous venez de faire étoiles support de tableau zéro, puis disent que égaux à 1. 901 00:41:37,370 --> 00:41:40,000 Donc, non, ce que nous disons voici ce que nous pouvons think-- 902 00:41:40,000 --> 00:41:42,600 nous pouvons traiter les tableaux comme des pointeurs. 903 00:41:42,600 --> 00:41:44,970 Donc, nous sommes ce que nous have-- dicton est que nous avons deux façons 904 00:41:44,970 --> 00:41:47,370 maintenant faire référence à un même bloc. 905 00:41:47,370 --> 00:41:52,270 Donc, si vous avez doing-- gamme zéro, le type de qui est maintenant un int. 906 00:41:52,270 --> 00:41:55,264 Et si vous prenez l'étoile qui, vous obtenez une chose valide. 907 00:41:55,264 --> 00:41:57,680 Donc, ce que nous disons ici, est il existe deux autres façons 908 00:41:57,680 --> 00:41:59,100 pour désigner le même bloc. 909 00:41:59,100 --> 00:42:01,860 Vous pouvez soit le faire ensemble 0 support est égal à 1. 910 00:42:01,860 --> 00:42:06,420 Ou vous pouvez faire déréférencer tableau, et avoir cette égale à 0. 911 00:42:06,420 --> 00:42:08,621 Il suffit donc deux façons de faire la même chose. 912 00:42:08,621 --> 00:42:09,120 Oui. 913 00:42:09,120 --> 00:42:15,270 >> Public: Pourquoi est-il pas taille de int 1 pour ajouter to-- 914 00:42:15,270 --> 00:42:17,650 >> Pulak GOYAL: Taille du 1 int. 915 00:42:17,650 --> 00:42:19,900 >> AUDIENCE: Parce que ce déplacement d'un arrêt. 916 00:42:19,900 --> 00:42:23,620 >> Pulak GOYAL: Parce que ce juste la façon dont C fonctionne. 917 00:42:23,620 --> 00:42:26,460 Il est juste la façon pointeur arithmétique est défini. 918 00:42:26,460 --> 00:42:27,854 Il va prendre le pointeur. 919 00:42:27,854 --> 00:42:30,020 Et puis tout ce que vous ajoutez à elle, il va multiplier ce 920 00:42:30,020 --> 00:42:34,770 par la taille de tout la boutique de pointeur est, ouais. 921 00:42:34,770 --> 00:42:35,480 Oui. 922 00:42:35,480 --> 00:42:39,595 >> Auditoire: Alors, vous dites que nous pouvons traiter pointeurs et les tableaux les mêmes, 923 00:42:39,595 --> 00:42:40,720 mais qu'ils sont différents. 924 00:42:40,720 --> 00:42:41,950 Donc, ce qui les rend différents? 925 00:42:41,950 --> 00:42:45,070 Que pouvons-nous pas faire avec l'un mais pas l'autre? 926 00:42:45,070 --> 00:42:52,390 >> Pulak GOYAL: Aux fins de la présente classe, je pense que ce que it's-- faire vous-- 927 00:42:52,390 --> 00:42:56,270 >> ENCEINTE 1: Donc, nous-- OK, donc, pour par exemple, si vous allouez de la mémoire 928 00:42:56,270 --> 00:42:59,680 et vous avez un pointeur vers un nombre entier, par exemple. 929 00:42:59,680 --> 00:43:01,890 Si vous avez essayé de démarrer faire l'arithmétique des pointeurs 930 00:43:01,890 --> 00:43:05,890 et aller au-delà de la quantité de mémoire vous avez alloué, vous souhaitez rencontrez des erreurs. 931 00:43:05,890 --> 00:43:08,250 Nous savons avec des tableaux, nous dis d'avance, OK, je 932 00:43:08,250 --> 00:43:11,400 vouloir allocate-- ce essentiellement dit, je tiens à allouer 933 00:43:11,400 --> 00:43:13,490 assez de place pour trois entiers. 934 00:43:13,490 --> 00:43:17,820 Et maintenant nous pouvons traiter la mémoire comme si nous avons tous les trois de ces entiers. 935 00:43:17,820 --> 00:43:19,460 Est-ce que ce genre de sens? 936 00:43:19,460 --> 00:43:22,042 >> Pulak GOYAL: Ouais. 937 00:43:22,042 --> 00:43:22,542 Oui. 938 00:43:22,542 --> 00:43:24,778 >> Auditoire: Alors, une étoile tableau, est que l'attribution 1 939 00:43:24,778 --> 00:43:26,657 à l'index 0 du tableau? 940 00:43:26,657 --> 00:43:27,365 Pulak GOYAL: Oui. 941 00:43:27,365 --> 00:43:31,160 942 00:43:31,160 --> 00:43:34,439 >> Auditoire: Alors, ce qui est après la deux lignes suivantes en termes de the-- I 943 00:43:34,439 --> 00:43:36,980 comprenez que vous essayez utiliser un pointeur arithmétique ici, 944 00:43:36,980 --> 00:43:39,355 mais encore une fois, je ne comprends pas ce pointeur arithmétique est. 945 00:43:39,355 --> 00:43:43,869 Donc, le tableau plus 1, vous êtes dire que vous êtes maintenant 946 00:43:43,869 --> 00:43:47,540 allez vouloir parler le premier index dans le tableau. 947 00:43:47,540 --> 00:43:50,050 >> Pulak GOYAL: Droit, et donc la raison qui fonctionne est un tableau, 948 00:43:50,050 --> 00:43:52,970 ici, nous pouvons penser comme un int étoiles. 949 00:43:52,970 --> 00:43:56,110 Et donc quand nous ne l'arithmétique des pointeurs sur elle, rappelez-vous la formule où 950 00:43:56,110 --> 00:43:59,020 nous prenons the-- Je suppose que tout ce qui l'adresse actuelle est, 951 00:43:59,020 --> 00:44:02,100 et puis quand nous ajoutons 1 à elle, nous avons effectivement 952 00:44:02,100 --> 00:44:06,620 multiplier une de la taille de la chose nous manipuler. 953 00:44:06,620 --> 00:44:09,090 Donc dans ce cas, la taille d'un int. 954 00:44:09,090 --> 00:44:11,634 Et puis nous déplaçons transmettre par beaucoup. 955 00:44:11,634 --> 00:44:14,419 >> ENCEINTE 1: Alors semblant vous avez b tableau étoiles. 956 00:44:14,419 --> 00:44:15,335 Pulak GOYAL: OK, ouais. 957 00:44:15,335 --> 00:44:16,005 ENCEINTE 1: Avec votre main. 958 00:44:16,005 --> 00:44:16,505 Va ici. 959 00:44:16,505 --> 00:44:18,350 Pulak GOYAL: Ou je peux just-- ouais. 960 00:44:18,350 --> 00:44:23,660 OK Donc ici--, donc à la gamme en commençant, est juste ici. 961 00:44:23,660 --> 00:44:29,155 Alors, quand nous déréférencer tableau, nous étions juste se référant au premier bloc ici. 962 00:44:29,155 --> 00:44:36,620 Mais maintenant, quand je fais tableau plus 1, que est-- cette flèche est maintenant ici. 963 00:44:36,620 --> 00:44:38,250 Est-ce que cela a du sens? 964 00:44:38,250 --> 00:44:46,690 Droit, parce que ce bloc est int taille, qui est de 4 octets. 965 00:44:46,690 --> 00:44:53,540 Et donc, ce que nous faisons est que nous sommes déplacer ce pointeur de 4 octets plus. 966 00:44:53,540 --> 00:44:56,080 Chaque fois que nous faisons l'arithmétique sur lui, il sera toujours 967 00:44:56,080 --> 00:44:59,730 déplacer par incréments de 4 octets. 968 00:44:59,730 --> 00:45:01,902 Parce que cela est comme un int étoiles. 969 00:45:01,902 --> 00:45:04,970 Cela a-t-il du sens? 970 00:45:04,970 --> 00:45:05,470 D'ACCORD. 971 00:45:05,470 --> 00:45:07,770 >> Auditoire: Alors les choses dans le tableau étaient 5 octets, nous passerions qu'il 5 bytes-- 972 00:45:07,770 --> 00:45:10,853 >> Pulak GOYAL: Bon, alors si nous avions un étoiles char, nous passerions par 1 octet seulement. 973 00:45:10,853 --> 00:45:13,670 Ainsi, dans le cas des étoiles de type char, il serait juste déplacer plus de 1. 974 00:45:13,670 --> 00:45:15,420 Public: Pour obtenir le côté vous avez besoin d'une étoile. 975 00:45:15,420 --> 00:45:18,099 Pulak GOYAL: Ouais, ouais, fait cela fait sens? 976 00:45:18,099 --> 00:45:19,890 ENCEINTE 1: Nous pouvons discuter à ce sujet plus tard. 977 00:45:19,890 --> 00:45:21,530 Pulak GOYAL: Ouais, ouais, bien sûr. 978 00:45:21,530 --> 00:45:23,214 OK cool. 979 00:45:23,214 --> 00:45:24,630 Passons à la section suivante. 980 00:45:24,630 --> 00:45:27,182 981 00:45:27,182 --> 00:45:28,140 ENCEINTE 1: Oh, OK cool. 982 00:45:28,140 --> 00:45:29,205 Ouais c'est moi. 983 00:45:29,205 --> 00:45:30,330 Tout droit, impressionnant. 984 00:45:30,330 --> 00:45:35,064 OK, cool, alors maintenant nous sommes sur un peu plus d'informations générales sur la mémoire. 985 00:45:35,064 --> 00:45:37,730 Aussi, je comprends le fait que ils allaient assez rapidement. 986 00:45:37,730 --> 00:45:40,230 Il ya beaucoup de matière à obtenir en une heure et demie. 987 00:45:40,230 --> 00:45:42,880 Mais si il ya des sujets que vous envie d'aller plus en profondeur dans, 988 00:45:42,880 --> 00:45:44,630 nous allons avoir les heures de bureau cette semaine 989 00:45:44,630 --> 00:45:46,340 où vous pouvez discuter avec nous sur une base individuelle. 990 00:45:46,340 --> 00:45:49,240 Ou vous pouvez simplement venir à la End et nous causons de choses. 991 00:45:49,240 --> 00:45:52,130 Et comme toujours, se sentir à poser des questions. 992 00:45:52,130 --> 00:45:52,695 Impressionnant. 993 00:45:52,695 --> 00:45:55,820 Alors, voici notre image de mémoire nous avons vu dans la leçon d'un milliard de fois. 994 00:45:55,820 --> 00:45:58,610 Et nous savons que cette pile croît à partir du bas 995 00:45:58,610 --> 00:46:00,214 et le tas pousse vers le bas. 996 00:46:00,214 --> 00:46:03,380 Et quelle est la différence entre les choses que nous gardons sur le tas et les choses 997 00:46:03,380 --> 00:46:05,981 que nous gardons sur la pile? 998 00:46:05,981 --> 00:46:07,397 Quelqu'un jeter quelque chose là-bas. 999 00:46:07,397 --> 00:46:10,806 1000 00:46:10,806 --> 00:46:11,780 Oui. 1001 00:46:11,780 --> 00:46:14,215 >> Public: Est-il empiler pour des choses qui sont juste 1002 00:46:14,215 --> 00:46:18,095 les variables éphémères que nous sommes juste déclarant utiliser certaines fonctions? 1003 00:46:18,095 --> 00:46:19,220 ENCEINTE 1: Belle, ouais. 1004 00:46:19,220 --> 00:46:23,007 Donc tout moment où, nous allons dire que nous sommes dans une fonction, 1005 00:46:23,007 --> 00:46:24,590 et nous avons juste quelques variables locales. 1006 00:46:24,590 --> 00:46:26,214 Ceux vont se retrouver sur la pile. 1007 00:46:26,214 --> 00:46:30,020 Si, à la place, nous appelons malloc et effectivement allouer de la mémoire, 1008 00:46:30,020 --> 00:46:32,290 qui revient toujours dans le tas. 1009 00:46:32,290 --> 00:46:35,100 Donc, ouais cool? 1010 00:46:35,100 --> 00:46:38,672 >> Et rappelez-vous que toute la mémoire que vous allouez avec malloc, 1011 00:46:38,672 --> 00:46:40,130 que ça va finir sur le tas. 1012 00:46:40,130 --> 00:46:42,019 Et si vous oubliez de gratuitement, l'ordinateur de 1013 00:46:42,019 --> 00:46:43,810 ne va pas de savoir que vous avez terminé avec elle. 1014 00:46:43,810 --> 00:46:45,560 Donc, il va juste accrocher là-bas dans la mémoire. 1015 00:46:45,560 --> 00:46:47,412 Et vous êtes essentiellement que les fuites mémoire. 1016 00:46:47,412 --> 00:46:48,120 Vous êtes le perdre. 1017 00:46:48,120 --> 00:46:51,840 Parce que vous jamais dit l'ordinateur, hey je suis fini de l'utiliser, vous pouvez utiliser, 1018 00:46:51,840 --> 00:46:53,632 mettre d'autres choses là-bas. 1019 00:46:53,632 --> 00:46:54,470 Bien. 1020 00:46:54,470 --> 00:46:55,928 Des questions là-bas? 1021 00:46:55,928 --> 00:46:56,428 Oui. 1022 00:46:56,428 --> 00:46:58,808 >> AUDIENCE: Alors, quel genre de mémoire est pile? 1023 00:46:58,808 --> 00:46:59,974 Aliments non dynamique, délégué? 1024 00:46:59,974 --> 00:47:01,200 Que voudriez-vous l'appeler? 1025 00:47:01,200 --> 00:47:03,870 >> ENCEINTE 1: Bien sûr, si vous pouviez penser comme des variables locales. 1026 00:47:03,870 --> 00:47:10,137 Appels à des fonctions réelles vont empiler. 1027 00:47:10,137 --> 00:47:10,720 autre chose? 1028 00:47:10,720 --> 00:47:11,220 Oui? 1029 00:47:11,220 --> 00:47:14,627 Public: Comment avez-vous gratuitement la mémoire vous a ajouté à the-- 1030 00:47:14,627 --> 00:47:17,710 ENCEINTE 1: Bien sûr, donc quand vous allouez mémoire sur le tas, vous appelez malloc. 1031 00:47:17,710 --> 00:47:20,543 Et alors que vous redonne une pointeur vers une certaine adresse en mémoire. 1032 00:47:20,543 --> 00:47:22,630 Alors dites-vous appelé ce pointeur, non? 1033 00:47:22,630 --> 00:47:24,970 Ensuite, vous dites juste pointeur libre. 1034 00:47:24,970 --> 00:47:27,351 Et qui libère la mémoire. 1035 00:47:27,351 --> 00:47:27,850 Bien. 1036 00:47:27,850 --> 00:47:28,660 D'autres questions? 1037 00:47:28,660 --> 00:47:28,880 Oui. 1038 00:47:28,880 --> 00:47:30,838 >> Public: Qu'est-ce que allouée dynamiquement signifie? 1039 00:47:30,838 --> 00:47:32,345 1040 00:47:32,345 --> 00:47:35,381 >> ENCEINTE 1: allouée dynamiquement des moyens, dans le cadre de votre programme. 1041 00:47:35,381 --> 00:47:37,630 Ainsi, lorsque vous appelez malloc dans au milieu de votre programme, 1042 00:47:37,630 --> 00:47:40,510 au début du programme, il n'y a pas la mémoire allouée. 1043 00:47:40,510 --> 00:47:42,600 Et comme l'ordinateur étape à travers ce code, 1044 00:47:42,600 --> 00:47:44,280 il va allouer la mémoire. 1045 00:47:44,280 --> 00:47:46,507 Voilà ce que nous entendons par dynamiquement. 1046 00:47:46,507 --> 00:47:47,090 Bonne question. 1047 00:47:47,090 --> 00:47:48,309 Oui? 1048 00:47:48,309 --> 00:47:50,809 AUDIENCE: Lorsque vous définissez une tableau avec les crochets, 1049 00:47:50,809 --> 00:47:54,154 fait cela encore [inaudible]? 1050 00:47:54,154 --> 00:47:55,570 ENCEINTE 1: Voilà une bonne question. 1051 00:47:55,570 --> 00:48:00,320 Je pense que lorsque vous allouez un tableau, il met effectivement sur la pile. 1052 00:48:00,320 --> 00:48:03,008 Je ne suis pas positif au sujet de que, pour ne pas me citer. 1053 00:48:03,008 --> 00:48:04,430 >> SPEAKER 2: Je pense que oui it-- il le met sur la pile. 1054 00:48:04,430 --> 00:48:05,763 >> ENCEINTE 1: met sur la pile. 1055 00:48:05,763 --> 00:48:07,044 OK, cool, confirmé. 1056 00:48:07,044 --> 00:48:07,710 D'autres questions? 1057 00:48:07,710 --> 00:48:08,030 Oui? 1058 00:48:08,030 --> 00:48:10,946 >> AUDIENCE: Lorsque vous déléguez malloc, ne fait pas l'ordinateur automatiquement 1059 00:48:10,946 --> 00:48:12,910 allouer de la mémoire pour vos variables? 1060 00:48:12,910 --> 00:48:14,660 ENCEINTE 1: Ouais, pour vos variables locales, 1061 00:48:14,660 --> 00:48:16,724 il met automatiquement mémoire sur la pile. 1062 00:48:16,724 --> 00:48:18,640 Auditoire: Alors, quelle est la point d'utiliser malloc? 1063 00:48:18,640 --> 00:48:19,840 ENCEINTE 1: Quelle est la point d'utiliser malloc? 1064 00:48:19,840 --> 00:48:22,850 Donc, nous avons vu un tas d'exemples, comme, par exemple, en utilisant swap, 1065 00:48:22,850 --> 00:48:25,690 où nous voulons que le champ d'application de la variable à être quelque chose 1066 00:48:25,690 --> 00:48:27,940 au-delà de son appel de fonction. 1067 00:48:27,940 --> 00:48:29,875 Et nous voulons quelque chose que nous pouvons passer autour 1068 00:48:29,875 --> 00:48:31,750 et que nous pouvons accéder à partir de différents endroits. 1069 00:48:31,750 --> 00:48:33,791 Voilà où nous voudrions mettre la mémoire sur le tas. 1070 00:48:33,791 --> 00:48:37,835 Alors que tous ces différents fonctions y ont accès. 1071 00:48:37,835 --> 00:48:40,510 >> Public: Pourriez-vous expliquer cela? 1072 00:48:40,510 --> 00:48:44,770 >> ENCEINTE 1: Donc une option est-- de sorte que le question était, pouvons-nous simplement allocate-- 1073 00:48:44,770 --> 00:48:47,660 Désolé, nous pouvons déclarer une variable globale, essentiellement. 1074 00:48:47,660 --> 00:48:48,560 Voilà une option. 1075 00:48:48,560 --> 00:48:50,893 Mais avec beaucoup de celles, celles ont tendance à être vraiment malpropre. 1076 00:48:50,893 --> 00:48:52,847 Et nous pensons généralement de ce que mauvaise conception. 1077 00:48:52,847 --> 00:48:53,821 Oui. 1078 00:48:53,821 --> 00:48:56,580 Cool, d'autres questions? 1079 00:48:56,580 --> 00:48:57,140 Impressionnant. 1080 00:48:57,140 --> 00:48:58,789 OK, passer. 1081 00:48:58,789 --> 00:49:00,580 Donc, cela est effectivement comment nous allouer de la mémoire. 1082 00:49:00,580 --> 00:49:02,670 Nous en avons parlé un peu. 1083 00:49:02,670 --> 00:49:04,240 Nous utilisons cette fonction appelée malloc. 1084 00:49:04,240 --> 00:49:07,850 Et vous lui dites combien d'octets mémoire, donc le nombre d'octets sur le tas, 1085 00:49:07,850 --> 00:49:08,610 tu veux. 1086 00:49:08,610 --> 00:49:13,120 Et il va retourner l'adresse, si un pointeur vers, un morceau de la mémoire 1087 00:49:13,120 --> 00:49:14,500 qu'il est alloué pour vous. 1088 00:49:14,500 --> 00:49:17,080 Donc, le type va être étoiles vide. 1089 00:49:17,080 --> 00:49:21,310 Ça va être un pointeur sur tout ce que vous décidez de mettre là-dedans. 1090 00:49:21,310 --> 00:49:23,530 Chaque fois que vous appelez malloc, nous avons déjà dit 1091 00:49:23,530 --> 00:49:25,640 vous devez libérer afin que nous ne pas avoir des fuites de mémoire. 1092 00:49:25,640 --> 00:49:27,170 >> Quelle est l'autre chose que vous absolument 1093 00:49:27,170 --> 00:49:29,185 avoir à faire chaque seule fois que vous appelez malloc? 1094 00:49:29,185 --> 00:49:31,210 1095 00:49:31,210 --> 00:49:32,210 OK, vous avez à le libérer. 1096 00:49:32,210 --> 00:49:34,010 Quelle est l'autre chose? 1097 00:49:34,010 --> 00:49:35,890 Vérifiez null, belle. 1098 00:49:35,890 --> 00:49:38,850 Alors, oui, il a raison là-haut sur le plateau. 1099 00:49:38,850 --> 00:49:42,120 Si vous essayez d'allouer mémoire et vous avez plus de mémoire, 1100 00:49:42,120 --> 00:49:44,940 l'ordinateur va dire, Je dois rien à vous donner. 1101 00:49:44,940 --> 00:49:47,650 Et il vous donne retour nul. 1102 00:49:47,650 --> 00:49:48,400 Questions à ce sujet? 1103 00:49:48,400 --> 00:49:49,290 Oui. 1104 00:49:49,290 --> 00:49:52,995 >> Public: Pourquoi voudriez-vous à déclarer un pointeur avec un type spécifique 1105 00:49:52,995 --> 00:49:56,329 quand étoiles vide peut gérer tous les types de pointeurs de toute façon? 1106 00:49:56,329 --> 00:49:57,370 ENCEINTE 1: Bonne question. 1107 00:49:57,370 --> 00:50:00,590 Pourquoi devrions-nous dire int étoiles par opposition à annuler étoiles 1108 00:50:00,590 --> 00:50:03,740 quand nulle étoile ne peut tout gérer? 1109 00:50:03,740 --> 00:50:06,390 Donc, nous ne voulons pas jamais transtyper explicitement pointeurs. 1110 00:50:06,390 --> 00:50:07,940 Il est juste une mauvaise pratique. 1111 00:50:07,940 --> 00:50:11,850 Mais nous allons parler int étoiles tout comme une compréhension de, 1112 00:50:11,850 --> 00:50:14,195 ceci est un pointeur sur un entier. 1113 00:50:14,195 --> 00:50:14,850 >> AUDIENCE: OK. 1114 00:50:14,850 --> 00:50:17,558 >> ENCEINTE 1: Ouais, et il permet de manipuler les valeurs en elle 1115 00:50:17,558 --> 00:50:18,667 comme des entiers. 1116 00:50:18,667 --> 00:50:20,008 >> AUDIENCE: Oh, OK. 1117 00:50:20,008 --> 00:50:22,250 Et nulle étoile ne serait pas vous laisser faire ça? 1118 00:50:22,250 --> 00:50:25,070 >> ENCEINTE 1: Cela dépend de la contexte Ouais, donc ne vous inquiétez pas 1119 00:50:25,070 --> 00:50:28,460 ne vous inquiétez pas trop sur le type là. 1120 00:50:28,460 --> 00:50:32,620 Il suffit de savoir que, en général, malloc renvoie un pointeur sur quelque chose. 1121 00:50:32,620 --> 00:50:33,520 Bonne question. 1122 00:50:33,520 --> 00:50:37,260 >> Public: Pourquoi avez-vous multipliez il 10 fois? [INAUDIBLE]. 1123 00:50:37,260 --> 00:50:40,150 >> ENCEINTE 1: Bien sûr, je était juste faisant exemple au hasard ici, où 1124 00:50:40,150 --> 00:50:42,840 Je voulais allouer suffisamment espace pour stocker 10 entiers. 1125 00:50:42,840 --> 00:50:44,320 Juste un choix aléatoire. 1126 00:50:44,320 --> 00:50:45,250 Oui. 1127 00:50:45,250 --> 00:50:45,440 Ouais, quoi de neuf? 1128 00:50:45,440 --> 00:50:47,440 >> Public: Ce que vous faites dire en vérifiant nulle? 1129 00:50:47,440 --> 00:50:51,351 Voulez-vous de vérifier la pointeur NULL ou le malloc? 1130 00:50:51,351 --> 00:50:52,350 ENCEINTE 1: Oui, exactement. 1131 00:50:52,350 --> 00:50:54,599 Donc la question est, ce qui voulons-nous dire par chèque nul? 1132 00:50:54,599 --> 00:50:57,880 Nous voulons to-- quand nous appelons malloc et nous sommes rentrés un pointeur, 1133 00:50:57,880 --> 00:51:01,110 nous voulons dire, est pointeur égale à null? 1134 00:51:01,110 --> 00:51:02,610 Donc littéralement PTR. 1135 00:51:02,610 --> 00:51:05,620 PTR est égale à null. 1136 00:51:05,620 --> 00:51:06,958 Oui. 1137 00:51:06,958 --> 00:51:08,832 Auditoire: Alors, je était gentil de se demander, si vous 1138 00:51:08,832 --> 00:51:14,013 initialiser le pointeur dans malloc, ne pointer vers le début de malloc? 1139 00:51:14,013 --> 00:51:15,097 Parce que si elle est un array-- 1140 00:51:15,097 --> 00:51:16,554 ENCEINTE 1: Voilà une très bonne question. 1141 00:51:16,554 --> 00:51:19,200 Ouais, si vous appelez malloc, la pointeur qui it-- disons, 1142 00:51:19,200 --> 00:51:21,700 alors voici nous allouons 10 octets de mémoire. 1143 00:51:21,700 --> 00:51:23,830 Donc, je suis désolé, assez ambiante pendant 10 entiers, 1144 00:51:23,830 --> 00:51:28,220 nous allons obtenir l'adresse de que la première pièce de la mémoire. 1145 00:51:28,220 --> 00:51:29,880 C'est une bonne question. 1146 00:51:29,880 --> 00:51:30,481 Oui. 1147 00:51:30,481 --> 00:51:34,810 >> PUBLIC: En allouant 10 entiers généralisées, 1148 00:51:34,810 --> 00:51:38,177 pourriez-vous utiliser en fait que pointeur comme like-- presque 1149 00:51:38,177 --> 00:51:39,372 comme un tableau d'entiers? 1150 00:51:39,372 --> 00:51:41,830 ENCEINTE 1: Ouais, si vous le pouvez l'utiliser comme un tableau d'entiers? 1151 00:51:41,830 --> 00:51:45,970 Oui, exactement, voici ce que Pulak juste vous a montré on-- un couple il ya glisse, 1152 00:51:45,970 --> 00:51:48,680 où nous disons, OK, cela est vraiment juste genre de-- nous 1153 00:51:48,680 --> 00:51:50,805 peut considérer comme une tableau de 10 nombres entiers. 1154 00:51:50,805 --> 00:51:52,222 Il arrive juste pour être sur le tas. 1155 00:51:52,222 --> 00:51:54,971 AUDIENCE: Mais vous ne pouviez pas l'accès avec une notation entre crochets? 1156 00:51:54,971 --> 00:51:58,220 ENCEINTE 1: Vous pouvez réellement accéder avec une notation entre crochets, ouais. 1157 00:51:58,220 --> 00:52:00,221 Vous pouvez les traiter de la même. 1158 00:52:00,221 --> 00:52:00,720 Oui. 1159 00:52:00,720 --> 00:52:02,420 >> Public: Pourquoi pointeur jamais nulle? 1160 00:52:02,420 --> 00:52:04,170 >> ENCEINTE 1: Pourquoi pointeur jamais nulle? 1161 00:52:04,170 --> 00:52:06,570 Si vous allez utiliser tout de la mémoire sur votre tas. 1162 00:52:06,570 --> 00:52:09,141 Si votre programme est de manger jusqu'à, manger jusqu'à, manger de la mémoire, 1163 00:52:09,141 --> 00:52:11,890 et il n'y a rien à gauche, puis malloc va say-- si vous dites, 1164 00:52:11,890 --> 00:52:14,760 Je veux plus de 100 octets, ce qui se passe à-dire, je ne ai pas 100 octets. 1165 00:52:14,760 --> 00:52:15,740 Voici nulle. 1166 00:52:15,740 --> 00:52:18,780 Cela signifie, je échoué. 1167 00:52:18,780 --> 00:52:20,516 Oui. 1168 00:52:20,516 --> 00:52:22,830 >> AUDIENCE: Dans ce cas, null est rien, non? 1169 00:52:22,830 --> 00:52:24,110 >> ENCEINTE 1: Oui, dans ce cas, nulle est rien. 1170 00:52:24,110 --> 00:52:24,943 Vous avez pas d'adresse. 1171 00:52:24,943 --> 00:52:28,065 Il n'y a pas de mémoire. 1172 00:52:28,065 --> 00:52:31,500 Tout droit, passer. 1173 00:52:31,500 --> 00:52:34,976 OK, parlons très rapidement sur les débordements de tampon. 1174 00:52:34,976 --> 00:52:38,210 Quand pouvons-nous rencontrer débordement de tampon? 1175 00:52:38,210 --> 00:52:42,980 Disons que nous avons a-- nous allouer un bloc de mémoire, 1176 00:52:42,980 --> 00:52:44,720 et nous allons écrire la chaîne dans. 1177 00:52:44,720 --> 00:52:47,240 Et nous allons dire, OK, je vais à allouer 1178 00:52:47,240 --> 00:52:49,320 assez de place pour six caractères. 1179 00:52:49,320 --> 00:52:51,680 Et je vais demander à l'utilisateur pour une entrée. 1180 00:52:51,680 --> 00:52:54,470 Et les entrées de l'utilisateur, par exemple, bonjour. 1181 00:52:54,470 --> 00:52:56,430 Et qui correspond parfaitement bien parce que nous avons 1182 00:52:56,430 --> 00:53:00,790 la place pour tous les caractères de bonjour, et le caractère de terminaison nulle. 1183 00:53:00,790 --> 00:53:02,840 Beaucoup d'espace, pas de problème. 1184 00:53:02,840 --> 00:53:08,010 >> Mais que faire si nous donnons l'occasion pour un utilisateur mal à utiliser notre programme, 1185 00:53:08,010 --> 00:53:13,152 et qu'ils tapent dans pas six caractères, ou cinq personnages, mais un million. 1186 00:53:13,152 --> 00:53:15,860 Ils gardent la dactylographie, et la saisie, et dactylographie, ce qui va se passer? 1187 00:53:15,860 --> 00:53:18,220 Eh bien, nous ne donnons que le enough-- informatique ou désolé, 1188 00:53:18,220 --> 00:53:23,350 nous ne donnions cette chaîne assez d'espace pour 5 caractères. 1189 00:53:23,350 --> 00:53:28,300 Donc, nous allons obtenir quelque chose comme ce, lorsque la personne qui est le mal 1190 00:53:28,300 --> 00:53:31,750 tapant entrée peut écraser la taille de la mémoire tampon, 1191 00:53:31,750 --> 00:53:35,922 et peut aller effectivement passé le montant qu'il est à l'origine alloué. 1192 00:53:35,922 --> 00:53:38,380 Et puis ce que vous pouvez faire, le vraiment mal chose que vous pouvez faire, 1193 00:53:38,380 --> 00:53:40,260 est d'écraser l'adresse de retour. 1194 00:53:40,260 --> 00:53:42,010 Ce qui signifie essentiellement vous pouvez sorte de prendre 1195 00:53:42,010 --> 00:53:45,110 contrôle du comportement du programme. 1196 00:53:45,110 --> 00:53:47,880 Donc, à un niveau très élevé buffer overflow est quand 1197 00:53:47,880 --> 00:53:49,960 vous allouez une certaine quantité de mémoire. 1198 00:53:49,960 --> 00:53:53,060 Et puis vous-- ce parce que vous êtes prenant entrée de l'utilisateur ou quelque chose 1199 00:53:53,060 --> 00:53:57,190 comme that-- vous dépassez les limites de ce que vous avez alloué à l'origine 1200 00:53:57,190 --> 00:53:59,955 et commencer à gâcher votre programme. 1201 00:53:59,955 --> 00:54:00,455 Oui? 1202 00:54:00,455 --> 00:54:03,220 >> Public: Pourquoi pas que juste retourner une erreur de segmentation? 1203 00:54:03,220 --> 00:54:05,594 >> ENCEINTE 1: Pourquoi pas que retourner une erreur de segmentation? 1204 00:54:05,594 --> 00:54:06,570 Cela pourrait. 1205 00:54:06,570 --> 00:54:10,030 Parfois, le compilateur ou au cours d'une de votre exécution 1206 00:54:10,030 --> 00:54:11,430 qui se passe réellement pour vérifier cela. 1207 00:54:11,430 --> 00:54:13,890 Si certaines choses se produisent, et cette est une sorte de niveau inférieur, 1208 00:54:13,890 --> 00:54:15,610 alors vous devez savoir. 1209 00:54:15,610 --> 00:54:18,820 Mais si vous ne concevez pas ces systèmes correctement, 1210 00:54:18,820 --> 00:54:21,170 alors vous avez la chance de ne pas l'attraper et juste 1211 00:54:21,170 --> 00:54:24,844 permettant à l'ordinateur la take-- le mal personne de contrôler votre ordinateur. 1212 00:54:24,844 --> 00:54:25,344 Oui. 1213 00:54:25,344 --> 00:54:26,260 >> AUDIENCE: [inaudible]? 1214 00:54:26,260 --> 00:54:28,934 1215 00:54:28,934 --> 00:54:29,600 ENCEINTE 1: Bien sûr. 1216 00:54:29,600 --> 00:54:33,800 Oh, quand je dis tampon, je veux juste dire la quantité de mémoire que vous avez alloué. 1217 00:54:33,800 --> 00:54:39,090 Donc ici, je dis, oh, nous avons alloué six char-- assez de place pour six caractères. 1218 00:54:39,090 --> 00:54:42,880 Et je demande juste que mon tampon où je pourrais écrire des informations. 1219 00:54:42,880 --> 00:54:44,390 Oui. 1220 00:54:44,390 --> 00:54:46,791 Toutes les autres questions à ce sujet? 1221 00:54:46,791 --> 00:54:47,290 Oui. 1222 00:54:47,290 --> 00:54:49,150 >> Public: Comment pouvez-vous arrêter il? 1223 00:54:49,150 --> 00:54:50,274 Comment voulez-vous arrêter il? 1224 00:54:50,274 --> 00:54:51,440 ENCEINTE 1: question impressionnant. 1225 00:54:51,440 --> 00:54:52,240 Comment voulez-vous arrêter il? 1226 00:54:52,240 --> 00:54:54,110 Comment prévenir le débordement de la mémoire tampon ne? 1227 00:54:54,110 --> 00:54:59,160 Eh bien une façon de le faire est quelque chose comme GetString, où nous augmentons constamment 1228 00:54:59,160 --> 00:55:03,200 la quantité de mémoire que nous allouons si l'utilisateur entre un grand nombre de texte. 1229 00:55:03,200 --> 00:55:07,570 Un autre la chose est, si vous ne veulent six personnages, faire une vérification rapide. 1230 00:55:07,570 --> 00:55:11,220 Dites seulement entrée six caractères. 1231 00:55:11,220 --> 00:55:12,444 Oui. 1232 00:55:12,444 --> 00:55:14,360 Donc, disons que vous étiez travailler on-- nous allons 1233 00:55:14,360 --> 00:55:16,985 aller pour le web, un peu plus tard dans la course-- mais nous allons 1234 00:55:16,985 --> 00:55:21,422 dire que vous travaillez sur un formulaire, vous feriez simplement limiter combien pourrait remis. 1235 00:55:21,422 --> 00:55:22,378 Oui. 1236 00:55:22,378 --> 00:55:24,768 >> AUDIENCE: GetString tire la mémoire de la pile, à droite? 1237 00:55:24,768 --> 00:55:25,444 Juste pour clarifier? 1238 00:55:25,444 --> 00:55:26,485 ENCEINTE 1: Une fois de plus? 1239 00:55:26,485 --> 00:55:28,400 Public: Est-ce que GetString prendre la mémoire de la pile? 1240 00:55:28,400 --> 00:55:31,210 ENCEINTE 1: Je crois Getm-- get int prend la mémoire du tas 1241 00:55:31,210 --> 00:55:32,911 car il appelle alloc. 1242 00:55:32,911 --> 00:55:33,452 AUDIENCE: Oh. 1243 00:55:33,452 --> 00:55:33,951 D'ACCORD. 1244 00:55:33,951 --> 00:55:35,750 ENCEINTE 1: Ouais, malloc et realloc. 1245 00:55:35,750 --> 00:55:37,120 D'autres questions? 1246 00:55:37,120 --> 00:55:37,803 Oui. 1247 00:55:37,803 --> 00:55:40,650 >> Auditoire: Alors, en définissant la taille de la mémoire tampon, 1248 00:55:40,650 --> 00:55:42,733 vous empêcher quelqu'un de être en mesure d'injecter du code 1249 00:55:42,733 --> 00:55:45,700 qui peut glisser au-delà de la [inaudible]. 1250 00:55:45,700 --> 00:55:48,130 >> ENCEINTE 1: Donc, en définissant la taille de la mémoire tampon, 1251 00:55:48,130 --> 00:55:50,760 vous avez dit, OK voici comment la quantité de mémoire que nous pouvons utiliser. 1252 00:55:50,760 --> 00:55:55,550 Si vous permettez à l'utilisateur d'écrire sur elle, alors vous allez avoir des problèmes. 1253 00:55:55,550 --> 00:55:57,930 Donner un sens. 1254 00:55:57,930 --> 00:55:59,370 Impressionnant. 1255 00:55:59,370 --> 00:56:00,640 Passons long. 1256 00:56:00,640 --> 00:56:02,320 D'accord. 1257 00:56:02,320 --> 00:56:06,652 Parlant d'erreurs, voici certains messages d'erreur courants 1258 00:56:06,652 --> 00:56:09,860 qui aurait pu montré pendant que vous étiez codage, travailler sur vos ensembles de problèmes. 1259 00:56:09,860 --> 00:56:12,320 Bonne chance que l'un des Ces spectacles sur le quiz 1260 00:56:12,320 --> 00:56:15,090 si dernières années sont une indication. 1261 00:56:15,090 --> 00:56:17,580 Ainsi, les réponses sont un peu ici sur la carte. 1262 00:56:17,580 --> 00:56:19,510 Mais se sentir libre de crier un peu plus. 1263 00:56:19,510 --> 00:56:21,280 >> Pourquoi une erreur de segmentation pourrait se produire? 1264 00:56:21,280 --> 00:56:24,279 Pourquoi pourriez-vous obtenir une erreur de segmentation lorsque vous utilisez votre programme? 1265 00:56:24,279 --> 00:56:26,760 1266 00:56:26,760 --> 00:56:28,230 >> AUDIENCE: [inaudible]. 1267 00:56:28,230 --> 00:56:29,500 >> ENCEINTE 1: Bon. 1268 00:56:29,500 --> 00:56:32,820 Oui, si nous essayons de l'accès mémoire qui est pas donné à nous. 1269 00:56:32,820 --> 00:56:34,610 Si nous déréférencer un pointeur NULL. 1270 00:56:34,610 --> 00:56:38,610 Par exemple, si nous appelons malloc, et d'oublier de vérifier si elle est nulle, 1271 00:56:38,610 --> 00:56:42,250 et nous essayons simplement de l'utiliser, de l'ordinateur va nous donner une erreur de segmentation. 1272 00:56:42,250 --> 00:56:42,750 Bien. 1273 00:56:42,750 --> 00:56:46,680 Qu'en est-il implicite déclaration de fonction? 1274 00:56:46,680 --> 00:56:48,589 Qu'est-ce que ça veut dire? 1275 00:56:48,589 --> 00:56:51,380 AUDIENCE: Vous essayez d'utiliser un fonction que vous ne l'avez pas défini. 1276 00:56:51,380 --> 00:56:52,130 ENCEINTE 1: Bon. 1277 00:56:52,130 --> 00:56:54,504 Vous essayez d'utiliser une fonction que vous ne l'avez pas défini. 1278 00:56:54,504 --> 00:56:56,000 Donc, cela pourrait être l'une des deux choses. 1279 00:56:56,000 --> 00:56:59,320 Peut-être qu'il était comme l'exemple Camille vous a montré plus tôt. 1280 00:56:59,320 --> 00:57:02,330 Et vous avez une fonction principale qui appelle quelque chose appelé cube. 1281 00:57:02,330 --> 00:57:04,371 Et disons que vous avez employée pour écrire ce prototype. 1282 00:57:04,371 --> 00:57:07,540 Vous avez oublié de dire, hey ordinateur, Je dois cette fonction appelée cube. 1283 00:57:07,540 --> 00:57:09,380 Vous verrez plus tard. 1284 00:57:09,380 --> 00:57:12,440 Disons que vous avez oublié d'écrire le prototype, vous pourriez obtenir cette erreur. 1285 00:57:12,440 --> 00:57:14,820 Une autre chose est, disons vous avez essayé d'utiliser printf, 1286 00:57:14,820 --> 00:57:16,880 et oublié d'inclure la bibliothèque standard, 1287 00:57:16,880 --> 00:57:20,240 alors il va dire implicite déclaration de fonction. 1288 00:57:20,240 --> 00:57:22,800 Et pour couronner le tout, identificateur non déclaré. 1289 00:57:22,800 --> 00:57:23,300 Oui. 1290 00:57:23,300 --> 00:57:24,841 >> Public: Vous avez un champ de problème. 1291 00:57:24,841 --> 00:57:28,728 Comme peut-être que vous essayez de appeler une variable locale qui est 1292 00:57:28,728 --> 00:57:30,884 dans une autre sorte de zone. 1293 00:57:30,884 --> 00:57:33,550 ENCEINTE 1: Grande, donc si vous avez une variable qui est pas dans la portée, 1294 00:57:33,550 --> 00:57:36,890 et vous essayez de l'utiliser, vous allez avoir des ennuis. 1295 00:57:36,890 --> 00:57:40,960 Et plus généralement, disons vous essayez d'utiliser x, avec jamais dire int 1296 00:57:40,960 --> 00:57:45,140 x est égal à 5, alors vous êtes va avoir des ennuis. 1297 00:57:45,140 --> 00:57:47,640 Excusez-moi, questions sur cette? 1298 00:57:47,640 --> 00:57:49,330 Impressionnant, soufflant à droite le long. 1299 00:57:49,330 --> 00:57:55,692 >> OK, récursivité, pourquoi might-- de laisser see-- je perdu mon sch-- oh ici nous allons, 1300 00:57:55,692 --> 00:57:57,400 Assurez-vous simplement que nous sommes à peu près sur le calendrier. 1301 00:57:57,400 --> 00:57:59,060 Tout droit, cool. 1302 00:57:59,060 --> 00:58:03,150 OK, récursivité, l'idée générale de la récursivité, une fonction récursive 1303 00:58:03,150 --> 00:58:05,380 est une fonction qui appelle lui-même. 1304 00:58:05,380 --> 00:58:08,170 OK, alors qu'est ce que je dire par un concept de programme 1305 00:58:08,170 --> 00:58:11,130 par lequel une fonction elle-même appelle. 1306 00:58:11,130 --> 00:58:16,210 Quel serait some-- ce qui est un bonne raison d'utiliser la récursivité? 1307 00:58:16,210 --> 00:58:17,550 Quand pourrait-il être utile? 1308 00:58:17,550 --> 00:58:20,926 Ou ce qui est un programme qui a vraiment se prête à la récursivité? 1309 00:58:20,926 --> 00:58:22,330 >> AUDIENCE: la recherche binaire. 1310 00:58:22,330 --> 00:58:25,500 >> ENCEINTE 1: recherche binaire se prête à la récursivité, 1311 00:58:25,500 --> 00:58:29,060 parce que vous avez ce problème que vous peut briser en petits morceaux, 1312 00:58:29,060 --> 00:58:32,330 et effectuer en continu le même algorithme dessus. 1313 00:58:32,330 --> 00:58:37,790 Cela conduit à, dans de nombreux cas, plus Code élégant qui est plus précis. 1314 00:58:37,790 --> 00:58:40,500 Nous sommes tout simplement l'exemple de recherche binaire. 1315 00:58:40,500 --> 00:58:43,100 Un autre exemple est le tri par fusion. 1316 00:58:43,100 --> 00:58:45,920 Parfois, quand vous pensez un algorithme, comme factorielle, 1317 00:58:45,920 --> 00:58:47,410 il se sent juste récursif, non? 1318 00:58:47,410 --> 00:58:52,440 Parce que nous savons que la factorielle 5 est une factorielle 4 fois 5. 1319 00:58:52,440 --> 00:58:56,080 Et donc quand vous configurez un problème de cette façon, il se sent juste récursive. 1320 00:58:56,080 --> 00:58:58,530 Donc, ce serait une excellente façon de l'écrire. 1321 00:58:58,530 --> 00:58:59,425 Des questions? 1322 00:58:59,425 --> 00:59:00,395 Oui. 1323 00:59:00,395 --> 00:59:01,850 >> Public: Qu'est-ce qu'un scénario de base? 1324 00:59:01,850 --> 00:59:02,770 >> ENCEINTE 1: Oh ce qui est un cas de base? 1325 00:59:02,770 --> 00:59:04,680 Je l'ai dit, ne pas oublier d'inclure un scénario de base. 1326 00:59:04,680 --> 00:59:07,690 Disons que nous écrivions une fonction factorielle, 1327 00:59:07,690 --> 00:59:09,620 et nous faisions factorielle de 5. 1328 00:59:09,620 --> 00:59:12,352 Et nous savons une factorielle de 5 est 5 fois par factorielle de 4, 1329 00:59:12,352 --> 00:59:13,310 bla, bla, bla, bla. 1330 00:59:13,310 --> 00:59:14,360 Comment savons-nous quand arrêter? 1331 00:59:14,360 --> 00:59:16,276 Comment savons-nous que nous avoir fait un certain nombre? 1332 00:59:16,276 --> 00:59:20,180 Parce que si nous gardions appelant factorielle, alors nous ne serions jamais obtenir une réponse, non? 1333 00:59:20,180 --> 00:59:24,470 Alors, quand savons-nous comment arrêter dans l'exemple factorielle. 1334 00:59:24,470 --> 00:59:25,460 Toute personne, ouais. 1335 00:59:25,460 --> 00:59:27,764 >> PUBLIC: Quand le 1 factorielle est 1. 1336 00:59:27,764 --> 00:59:28,430 ENCEINTE 1: Bon. 1337 00:59:28,430 --> 00:59:29,530 Donc, nous savons. 1338 00:59:29,530 --> 00:59:33,400 Nous pouvons prendre pour acquis que Une factorielle est égal à 1. 1339 00:59:33,400 --> 00:59:36,570 Donc, si nous arrivons à un point où nous appelons factorielle sur 1, 1340 00:59:36,570 --> 00:59:38,050 juste aller de l'avant et revenir 1. 1341 00:59:38,050 --> 00:59:39,180 Et cela est votre cas de base. 1342 00:59:39,180 --> 00:59:45,040 Parce que nous savons que quand nous sommes arrivés, et nous serons toujours frappé, nous allons never-- 1343 00:59:45,040 --> 00:59:48,800 nous ne serons pas juste continuer pour toujours. 1344 00:59:48,800 --> 00:59:50,700 D'autres questions sur la récursivité? 1345 00:59:50,700 --> 00:59:51,630 Oui. 1346 00:59:51,630 --> 00:59:54,420 >> Auditoire: Alors, quand vous revenez 1, il vient automatiquement 1347 00:59:54,420 --> 00:59:56,290 va arrêter le programme, non? 1348 00:59:56,290 --> 00:59:59,390 >> ENCEINTE 1: Ouais donc quand vous retour d'appel 1, si-- disons, 1349 00:59:59,390 --> 01:00:04,480 disons factorielle de 2 appels factorielle de 1, factorielle de 1 1350 01:00:04,480 --> 01:00:06,120 va simplement restituer 1. 1351 01:00:06,120 --> 01:00:12,790 Et maintenant factorielle de 2 dira OK, 2 fois 1 est 2, et retourner cette réponse. 1352 01:00:12,790 --> 01:00:14,260 Oui. 1353 01:00:14,260 --> 01:00:16,710 >> Public: Avez nous devons nous inquiéter sur la portée de la récursivité 1354 01:00:16,710 --> 01:00:20,150 quand vous allez dans un algorithme? 1355 01:00:20,150 --> 01:00:21,880 >> ENCEINTE 1: Ah, oui. 1356 01:00:21,880 --> 01:00:25,060 Oui, vous avez à vous soucier de portée dans le cadre de la récursion. 1357 01:00:25,060 --> 01:00:29,820 Donc, seules les variables définies dans cette course de la fonction 1358 01:00:29,820 --> 01:00:32,170 vont être utiles. 1359 01:00:32,170 --> 01:00:33,792 Ouais bonne question. 1360 01:00:33,792 --> 01:00:35,250 Très bien, gardons déplaçant le long. 1361 01:00:35,250 --> 01:00:37,320 Parce que nous avons beaucoup de matériel pour passer à travers. 1362 01:00:37,320 --> 01:00:41,080 Mais comme je l'ai dit, se sentir libre de frapper les heures de bureau, ou de nous après le fait. 1363 01:00:41,080 --> 01:00:42,850 >> Ceci est juste une diapositive vraiment rapide. 1364 01:00:42,850 --> 01:00:45,150 Nous avons appris beaucoup de choses sur recherches et les tris. 1365 01:00:45,150 --> 01:00:47,400 S'il te plaît s'il te plaît s'il te plaît, ces sections sont en ligne, 1366 01:00:47,400 --> 01:00:51,240 Je crois au cs50.net/quizzes. 1367 01:00:51,240 --> 01:00:53,762 Alors, allez prendre ce tableau et le mettre sur votre feuille d'examen, 1368 01:00:53,762 --> 01:00:55,470 parce qu'il y aura une question à ce sujet. 1369 01:00:55,470 --> 01:00:56,682 S'il vous plaît ne pas se tromper. 1370 01:00:56,682 --> 01:00:58,390 Très rapidement, ce que signifie ce tableau, 1371 01:00:58,390 --> 01:01:04,370 est il parle de Big O, que nous connaissons être la limite supérieure de un algorithmes 1372 01:01:04,370 --> 01:01:05,150 temps de marche. 1373 01:01:05,150 --> 01:01:08,080 Et nous avons l'oméga, qui est va être la limite inférieure 1374 01:01:08,080 --> 01:01:10,290 d'un environnement d'exécution des algorithmes. 1375 01:01:10,290 --> 01:01:10,840 D'accord? 1376 01:01:10,840 --> 01:01:12,480 >> AUDIENCE: [inaudible]. 1377 01:01:12,480 --> 01:01:12,800 >> ENCEINTE 1: Ouais, ce qui est la dernière chose? 1378 01:01:12,800 --> 01:01:13,380 Quel est thêta? 1379 01:01:13,380 --> 01:01:16,850 Il est si nous-- nous allons seulement soucier dans cette classe dans le cas 1380 01:01:16,850 --> 01:01:19,381 où notre borne supérieure et notre borne inférieure sont les mêmes. 1381 01:01:19,381 --> 01:01:22,005 Ouais, voilà la seule fois où il est va venir dans cette classe. 1382 01:01:22,005 --> 01:01:23,320 OK, je vais continuer. 1383 01:01:23,320 --> 01:01:26,490 Si vous ne l'avez pas pris votre photo, Je vous promets qu'ils seront en ligne. 1384 01:01:26,490 --> 01:01:28,220 >> OK, impressionnant, structures. 1385 01:01:28,220 --> 01:01:29,810 Pourquoi pourrions nous voulons structs? 1386 01:01:29,810 --> 01:01:34,110 Qu'est-ce une raison utile nous pourrions vouloir structures. 1387 01:01:34,110 --> 01:01:36,277 Quelqu'un crier quelque chose. 1388 01:01:36,277 --> 01:01:38,110 Eh bien, regardons la par exemple sur la carte. 1389 01:01:38,110 --> 01:01:41,090 Disons que nous avons affaire avec tous ces étudiants. 1390 01:01:41,090 --> 01:01:44,900 Si nous faisons un programme pour CS50, il ya comme 800 personnes. 1391 01:01:44,900 --> 01:01:47,890 Nous devons write-- nous allons besoin de gérer un grand nombre d'informations 1392 01:01:47,890 --> 01:01:49,020 sur les élèves. 1393 01:01:49,020 --> 01:01:50,990 Ce serait bien si nous pourrions sorte de groupe 1394 01:01:50,990 --> 01:01:54,460 this-- toutes les informations que a à voir avec un élève en particulier 1395 01:01:54,460 --> 01:01:56,027 dans un type de données. 1396 01:01:56,027 --> 01:01:58,360 Mais nous savons qu'il n'y a pas de données type appelé, étudiants, non? 1397 01:01:58,360 --> 01:02:01,890 Nous avons un nombre entier, nous avons un flotteur, nous avons une chaîne, ou une étoile de char, 1398 01:02:01,890 --> 01:02:03,920 mais nous ne disposons pas, un étudiant. 1399 01:02:03,920 --> 01:02:08,680 >> Donc, nous pouvons faire est effectivement sorte de définir notre propre structure, appelez-étudiant, 1400 01:02:08,680 --> 01:02:12,440 et nous pouvons associer une certaine différents domaines avec cette structure. 1401 01:02:12,440 --> 01:02:14,410 Donc dans ce cas, nous allons dire que nous avons un étudiant. 1402 01:02:14,410 --> 01:02:17,350 Et les choses que nous nous soucions propos sont le numéro de la carte d'étudiant 1403 01:02:17,350 --> 01:02:19,500 et le nom de l'étudiant. 1404 01:02:19,500 --> 01:02:24,175 Et maintenant, nous pouvons associer ce ID et ce nom avec un élève donné. 1405 01:02:24,175 --> 01:02:25,300 Voyons quelques exemples. 1406 01:02:25,300 --> 01:02:28,860 1407 01:02:28,860 --> 01:02:33,490 >> OK, alors voici je dis, OK, nous allons disons que nous voulons faire un étudiant. 1408 01:02:33,490 --> 01:02:35,050 Je l'appelle l'élève 1. 1409 01:02:35,050 --> 01:02:38,850 Et son numéro d'identification, dans ce cas, nous pouvons accéder 1410 01:02:38,850 --> 01:02:45,200 en faisant juste le nom de l'étudiant parsèment le domaine, nous voulons accéder. 1411 01:02:45,200 --> 01:02:49,110 Donc, cela va juste être étudiant 1 point ID, et nous avons mis il égal à 1. 1412 01:02:49,110 --> 01:02:52,300 Parce que souvenez-vous, nous avons dit que ID va être un entier. 1413 01:02:52,300 --> 01:02:56,540 Et de manière très similaire, nous pouvons dire que cette nom de l'étudiant va être Davin, 1414 01:02:56,540 --> 01:02:57,760 par example. 1415 01:02:57,760 --> 01:03:01,420 Donc, nous ne pouvons tout simplement d'accéder au champ d'une structure en utilisant ces points. 1416 01:03:01,420 --> 01:03:03,098 Questions à ce sujet? 1417 01:03:03,098 --> 01:03:03,598 Oui. 1418 01:03:03,598 --> 01:03:05,582 >> Public: Est-il possible pour protéger vos variables? 1419 01:03:05,582 --> 01:03:08,560 Yat-il un moyen de protéger les variables étant accessibles à partir de l'extérieur? 1420 01:03:08,560 --> 01:03:10,726 >> ENCEINTE 1: Y at-il de toute façon pour protéger vos variables 1421 01:03:10,726 --> 01:03:12,680 étant accessibles à partir de l'extérieur? 1422 01:03:12,680 --> 01:03:13,750 Pas dans le champ d'application de CS50. 1423 01:03:13,750 --> 01:03:16,680 1424 01:03:16,680 --> 01:03:17,977 D'autres questions? 1425 01:03:17,977 --> 01:03:18,476 Oui. 1426 01:03:18,476 --> 01:03:18,942 >> Public: Quel est typedef struct? 1427 01:03:18,942 --> 01:03:20,192 Qu'est-ce que chaque composant signifie? 1428 01:03:20,192 --> 01:03:22,937 1429 01:03:22,937 --> 01:03:24,520 ENCEINTE 1: Ah, ce qui est typedef struct? 1430 01:03:24,520 --> 01:03:26,240 Qu'est-ce que chaque composant moyenne de ce type? 1431 01:03:26,240 --> 01:03:26,850 >> AUDIENCE: Ouais. 1432 01:03:26,850 --> 01:03:27,683 >> ENCEINTE 1: OK, cool. 1433 01:03:27,683 --> 01:03:31,200 Donc, cela dit, hey ordinateur, je vouloir créer une nouvelle structure. 1434 01:03:31,200 --> 01:03:34,970 Et je vais définir une définition pour cela, de sorte que je puisse l'utiliser 1435 01:03:34,970 --> 01:03:37,520 comme si elle était un type tout au long de mon programme. 1436 01:03:37,520 --> 01:03:39,300 OK, je tiens donc à définir une structure. 1437 01:03:39,300 --> 01:03:41,650 Et je vais maintenant être capable de l'utiliser comme un type. 1438 01:03:41,650 --> 01:03:43,400 Et son nom est étudiant. 1439 01:03:43,400 --> 01:03:45,730 Et voici ses champs. 1440 01:03:45,730 --> 01:03:48,130 >> Auditoire: Alors, est que typedef struct [inaudible]? 1441 01:03:48,130 --> 01:03:50,592 1442 01:03:50,592 --> 01:03:53,800 ENCEINTE 1: Si vous voulez être en mesure de utiliser cette structure tout au long de votre programme, 1443 01:03:53,800 --> 01:03:57,910 et dans la plupart des cas dans CS50 nous faire, nous avons à dire de type Def. 1444 01:03:57,910 --> 01:04:01,190 Et qui lui permet d'utiliser la même façon dont nous utilisons comme int ou float. 1445 01:04:01,190 --> 01:04:04,168 L'ordinateur sait toujours ce qu'il est. 1446 01:04:04,168 --> 01:04:04,668 Oui. 1447 01:04:04,668 --> 01:04:06,560 >> AUDIENCE: Pouvons-nous écrire ceci dans le fichier d'en-tête? 1448 01:04:06,560 --> 01:04:07,060 >> ENCEINTE 1: Oh, désolé. 1449 01:04:07,060 --> 01:04:08,600 Devons-nous écrivons ceci dans le fichier d'en-tête? 1450 01:04:08,600 --> 01:04:11,410 Vous pouvez écrire ceci au début de votre programme, au début de votre programme de c. 1451 01:04:11,410 --> 01:04:13,010 Ouais, ce serait le plus endroit raisonnable pour elle. 1452 01:04:13,010 --> 01:04:13,509 Là-bas. 1453 01:04:13,509 --> 01:04:15,704 AUDIENCE: Même question, donc avant principal? 1454 01:04:15,704 --> 01:04:18,870 ENCEINTE 1: droit, vous en aurez besoin pour être quelque part que tout le monde peut y accéder. 1455 01:04:18,870 --> 01:04:20,612 Donc, avant de principale dans votre cas, oui. 1456 01:04:20,612 --> 01:04:23,820 Public: Y at-il une différence entre mettre l'étudiant sur le dessus et sur le fond? 1457 01:04:23,820 --> 01:04:25,810 ENCEINTE 1: Ah, est-il un différence entre l'étudiant de mettre 1458 01:04:25,810 --> 01:04:26,840 en haut ou en bas? 1459 01:04:26,840 --> 01:04:29,650 Let-- sauver cette question, et lorsque nous arriverons à des listes liées, 1460 01:04:29,650 --> 01:04:31,020 nous verrons que, OK? 1461 01:04:31,020 --> 01:04:32,750 Donc, tenir à ce que pendant une seconde. 1462 01:04:32,750 --> 01:04:37,080 La dernière chose que je veux mentionner ici, est au lieu d'avoir une structure, 1463 01:04:37,080 --> 01:04:41,180 nous avons un pointeur sur une structure, nous pouvons changer notre notation 1464 01:04:41,180 --> 01:04:42,480 être un peu plus agréable. 1465 01:04:42,480 --> 01:04:45,810 >> Nous pouvons dire, disons que nous avons une pointeur vers un étudiant plutôt que de simplement 1466 01:04:45,810 --> 01:04:47,040 un étudiant. 1467 01:04:47,040 --> 01:04:52,460 Si nous voulons avoir accès à un champ, au lieu de faisant, bien aller déréférence le pointeur, 1468 01:04:52,460 --> 01:04:54,100 puis accéder au nom de domaine. 1469 01:04:54,100 --> 01:04:57,310 Cette notation ressemble un peu salissant avec la star dans ce point. 1470 01:04:57,310 --> 01:05:00,790 Tout à fait exact, mais une sorte de façon plus propre de le faire, 1471 01:05:00,790 --> 01:05:03,280 est juste de dire le nom pointeur de la flèche. 1472 01:05:03,280 --> 01:05:11,460 Et qui combine effectivement déréférencement et l'accès à un beau symbole. 1473 01:05:11,460 --> 01:05:12,470 Questions à ce sujet? 1474 01:05:12,470 --> 01:05:13,760 >> PUBLIC: Il suffit de dire que une fois de plus. 1475 01:05:13,760 --> 01:05:14,480 >> ENCEINTE 1: Disons que une fois de plus. 1476 01:05:14,480 --> 01:05:16,021 >> AUDIENCE: Exactement ce que vous venez de dire. 1477 01:05:16,021 --> 01:05:17,870 ENCEINTE 1: Bien sûr, exactement ce que je viens de dire. 1478 01:05:17,870 --> 01:05:21,580 Si nous avons un pointeur à un étudiant plutôt que l'étudiant lui-même, 1479 01:05:21,580 --> 01:05:25,410 nous can-- une façon que nous pouvons accéder à la domaine est de déréférencer, puis 1480 01:05:25,410 --> 01:05:27,110 Nom d'accès. 1481 01:05:27,110 --> 01:05:29,040 Une autre façon, plus agréable, nous peut le faire, ce qui est juste 1482 01:05:29,040 --> 01:05:33,550 un peu de sucre syntaxique, est juste à faire pointeur nom de flèche. 1483 01:05:33,550 --> 01:05:38,190 Et qui va combiner le déréférencement et accédez. 1484 01:05:38,190 --> 01:05:40,400 Ouais, assez cool. 1485 01:05:40,400 --> 01:05:41,260 D'accord. 1486 01:05:41,260 --> 01:05:44,390 >> Donc, nous allons parler de l'autre question. 1487 01:05:44,390 --> 01:05:46,520 Débutons aux nœuds, que nous allons utiliser 1488 01:05:46,520 --> 01:05:49,120 dans les listes liées dans une seconde. 1489 01:05:49,120 --> 01:05:53,580 Donc, ici, vous remarquerez qu'il ya est le noeud de texte à la fois sur le fond, 1490 01:05:53,580 --> 01:05:55,160 et sur le dessus. 1491 01:05:55,160 --> 01:05:59,040 Avant, lorsque nous définissions étudiant, nous avons juste eu étudiant sur le fond. 1492 01:05:59,040 --> 01:06:00,470 Nous ne disposons pas des étudiants sur le dessus. 1493 01:06:00,470 --> 01:06:01,902 Quelqu'un sait pourquoi cela pourrait être? 1494 01:06:01,902 --> 01:06:02,860 Quelle est la différence? 1495 01:06:02,860 --> 01:06:03,360 Oui. 1496 01:06:03,360 --> 01:06:06,212 Auditoire: Alors, vous utilisez noeud est la définition de noeud, 1497 01:06:06,212 --> 01:06:08,254 de sorte qu'il est une chose récursive? 1498 01:06:08,254 --> 01:06:08,920 ENCEINTE 1: Bon. 1499 01:06:08,920 --> 01:06:13,230 Oui, nous avons besoin de nos noeuds avoir pointeur à d'autres nœuds. 1500 01:06:13,230 --> 01:06:17,640 Donc, puisque nous utilisons ce type avant qu'il ne soit réellement défini, 1501 01:06:17,640 --> 01:06:20,613 nous avons besoin de le mettre en haut de même il sait ce qu'il est. 1502 01:06:20,613 --> 01:06:22,446 Auditoire: Alors, nous avons encore besoin au fond? 1503 01:06:22,446 --> 01:06:23,338 ENCEINTE 1: Oui. 1504 01:06:23,338 --> 01:06:24,754 Auditoire: Alors, toujours au fond. 1505 01:06:24,754 --> 01:06:26,090 ENCEINTE 1: Toujours au fond. 1506 01:06:26,090 --> 01:06:29,410 Donc, tous les vôtres seront avoir au fond. 1507 01:06:29,410 --> 01:06:30,720 D'autres questions? 1508 01:06:30,720 --> 01:06:33,511 Tout droit, laisse ainsi parler effectivement à propos liée listes très rapidement. 1509 01:06:33,511 --> 01:06:36,510 Donc, les listes chaînées soient: nous les utilisons au lieu de tableaux dans certains cas, 1510 01:06:36,510 --> 01:06:40,030 parce que nous savons que les tableaux sont un longueur fixe, alors que les listes chaînées 1511 01:06:40,030 --> 01:06:42,670 nous pouvons grandir et rétrécir comme nous voulons. 1512 01:06:42,670 --> 01:06:45,790 Donc, ceci est un exemple de ce que une liste chaînée pourrait ressembler. 1513 01:06:45,790 --> 01:06:48,590 Ce que nous devons voir est la tête de la liste. 1514 01:06:48,590 --> 01:06:50,330 Alors, où la liste commence. 1515 01:06:50,330 --> 01:06:53,010 Et puis il nœud, chaque noeud suivant, est 1516 01:06:53,010 --> 01:06:55,880 responsable de connaître où le noeud suivant est. 1517 01:06:55,880 --> 01:07:00,950 Donc dans ce cas, le nœud qui stocke 1 est responsable de savoir où est 3. 1518 01:07:00,950 --> 01:07:04,540 La personne qui stocke 3 est responsables de savoir où 9 est. 1519 01:07:04,540 --> 01:07:06,230 Et 9 a personne d'autre pour pointer vers. 1520 01:07:06,230 --> 01:07:08,750 Il est la fin de la liste, il dit simplement nulle. 1521 01:07:08,750 --> 01:07:09,250 D'accord? 1522 01:07:09,250 --> 01:07:10,530 >> Public: Quel est le point de tout cela? 1523 01:07:10,530 --> 01:07:11,480 >> ENCEINTE 1: Quel est le point de tout cela? 1524 01:07:11,480 --> 01:07:12,105 >> AUDIENCE: Ouais. 1525 01:07:12,105 --> 01:07:15,390 ENCEINTE 1: Parce que, de laisser dire que nous avons des données. 1526 01:07:15,390 --> 01:07:18,480 Et nous ne savons pas exactement comment beaucoup de données que nous voulons à l'avance. 1527 01:07:18,480 --> 01:07:22,479 Donc, avec un tableau, disons où nous vouloir compter les gens dans la première rangée. 1528 01:07:22,479 --> 01:07:24,020 Il ya des chances qu'il ne va pas changer. 1529 01:07:24,020 --> 01:07:28,120 Nous pouvons simplement dire, OK, je veulent un tableau de taille six. 1530 01:07:28,120 --> 01:07:30,120 Mais si nous voulons quelque chose que cela va changer. 1531 01:07:30,120 --> 01:07:32,900 >> Par exemple, disons que je tentais de garder une trace des étudiants 1532 01:07:32,900 --> 01:07:35,330 comme ils viennent dans la salle pour la session d'examen. 1533 01:07:35,330 --> 01:07:38,420 Je ne sais pas combien d'entre vous les gens vont se présenter. 1534 01:07:38,420 --> 01:07:43,094 Donc, je pourrais vouloir une structure de données que je peux étendre et réduire. 1535 01:07:43,094 --> 01:07:45,510 Parce que peut-être quelqu'un quitter, peut-être que quelqu'un viendra. 1536 01:07:45,510 --> 01:07:48,386 Et à tout moment, nous peut ajouter ou supprimer des nœuds. 1537 01:07:48,386 --> 01:07:49,771 Cool, bonne question. 1538 01:07:49,771 --> 01:07:50,270 Oui. 1539 01:07:50,270 --> 01:07:52,311 >> Public: Si vous pouvez utiliser quelque chose comme GetString 1540 01:07:52,311 --> 01:07:55,750 qui garde vous permettant de faire plus de données que vous en avez besoin, pourquoi avez-vous besoin de ce trop? 1541 01:07:55,750 --> 01:07:57,625 >> ENCEINTE 1: Pourquoi vous utilisez la liste lorsqu'ils sont liés 1542 01:07:57,625 --> 01:07:59,440 vous pouvez utiliser quelque chose comme GetString? 1543 01:07:59,440 --> 01:08:01,640 C'est une bonne question. 1544 01:08:01,640 --> 01:08:04,240 Rappelez-vous que l'un des Get-- les chutes de GetString 1545 01:08:04,240 --> 01:08:06,750 est que nous ne faisons pas un très bon travail de libérer cette mémoire, 1546 01:08:06,750 --> 01:08:09,320 et nous avons lancé un tas de des fuites de mémoire dans votre programme? 1547 01:08:09,320 --> 01:08:15,037 Vous pourriez prendre un statiquement gamme de taille et de garder cultiver. 1548 01:08:15,037 --> 01:08:16,870 Mais vous auriez à trouver de nouveaux endroits dans la mémoire. 1549 01:08:16,870 --> 01:08:18,359 Il serait tout simplement beaucoup de frais généraux. 1550 01:08:18,359 --> 01:08:21,050 >> Une des belles choses sur liée listes plutôt que de tableaux, est tableaux 1551 01:08:21,050 --> 01:08:22,830 sont tous dans le même emplacement dans la mémoire. 1552 01:08:22,830 --> 01:08:25,540 Il doit être continu morceaux de mémoire. 1553 01:08:25,540 --> 01:08:29,920 Considérant que les listes chaînées, 2 et 3 mai être totalement dans des endroits différents. 1554 01:08:29,920 --> 01:08:31,880 Comme 2 est ici, et 3 est ici. 1555 01:08:31,880 --> 01:08:34,421 Et aussi longtemps qu'ils ont une pointeur à l'autre, il est très bien. 1556 01:08:34,421 --> 01:08:35,830 Nous savons que nous pouvons les trouver. 1557 01:08:35,830 --> 01:08:37,084 Question là-bas? 1558 01:08:37,084 --> 01:08:40,563 >> AUDIENCE: GetString est une fonction dans la bibliothèque de CS50, non? 1559 01:08:40,563 --> 01:08:42,060 Il ne existe pas dans les programmes réels. 1560 01:08:42,060 --> 01:08:42,851 >> ENCEINTE 1: Exact. 1561 01:08:42,851 --> 01:08:44,130 Droit, qui est l'autre chose. 1562 01:08:44,130 --> 01:08:47,210 GetString ne pas exister en dehors du contexte de CS50. 1563 01:08:47,210 --> 01:08:47,710 Oui. 1564 01:08:47,710 --> 01:08:54,556 >> AUDIENCE: fait donc le fait que deux pourraient être très éloignés, 1565 01:08:54,556 --> 01:08:59,859 est l'impact de l'efficacité des accéder aux éléments sur la liste? 1566 01:08:59,859 --> 01:09:01,359 ENCEINTE 1: Voilà une très bonne question. 1567 01:09:01,359 --> 01:09:04,278 La question était, fait l'impact l'efficacité de l'accès 1568 01:09:04,278 --> 01:09:05,819 ces différents éléments dans la liste. 1569 01:09:05,819 --> 01:09:06,930 En fait, oui. 1570 01:09:06,930 --> 01:09:09,569 Parce que nous savons, nous allons si-- disons que nous voulons accéder 1571 01:09:09,569 --> 01:09:14,520 le deuxième élément du tableau, on sait nous ne pouvons faire ensemble étrier 1, à droite. 1572 01:09:14,520 --> 01:09:16,630 Il va toujours être au même endroit. 1573 01:09:16,630 --> 01:09:20,720 Mais si nous voulons arriver à ce 3, nous ne pouvons pas simplement dire, aller chercher ce que 3. 1574 01:09:20,720 --> 01:09:24,009 Nous avons à dire, OK, commencer à le début de la liste, 1575 01:09:24,009 --> 01:09:26,050 et maintenant nous avons fait de marcher à travers jusqu'à ce que nous 1576 01:09:26,050 --> 01:09:28,149 trouver le nombre qui nous intéresse. 1577 01:09:28,149 --> 01:09:30,790 >> Donc dans ce cas nous disons, OK ceci est le premier nombre. 1578 01:09:30,790 --> 01:09:32,207 Donc, essentiellement, qui est l'index 0. 1579 01:09:32,207 --> 01:09:33,790 Maintenant, nous devons trouver le deuxième chiffre. 1580 01:09:33,790 --> 01:09:34,740 Voilà l'indice 1. 1581 01:09:34,740 --> 01:09:39,180 Alors que se passe réellement to-- juste accéder, va prendre du temps N. 1582 01:09:39,180 --> 01:09:42,027 Cool, grand vieux N. Ouais. 1583 01:09:42,027 --> 01:09:43,903 >> PUBLIC: Quels sont chacune des listes? 1584 01:09:43,903 --> 01:09:45,401 Sont-ils chacun des tableaux, ou quoi? 1585 01:09:45,401 --> 01:09:46,859 ENCEINTE 1: Voilà une très bonne question. 1586 01:09:46,859 --> 01:09:48,950 Quels sont chacun des structures que je suis en tirer? 1587 01:09:48,950 --> 01:09:51,649 Ils sont des noeuds. 1588 01:09:51,649 --> 01:09:53,720 Donc, chacun de ces petits la structure comporte deux parties. 1589 01:09:53,720 --> 01:09:55,264 Il a un nombre entier qui détient. 1590 01:09:55,264 --> 01:09:57,180 Voilà les données réelles que ça accrocher. 1591 01:09:57,180 --> 01:09:58,770 Voilà le genre de partie utile. 1592 01:09:58,770 --> 01:10:00,820 Et, voici ce que rend une liste chaînée, 1593 01:10:00,820 --> 01:10:03,690 il a un pointeur vers le noeud suivant. 1594 01:10:03,690 --> 01:10:05,260 Impressionnant question. 1595 01:10:05,260 --> 01:10:11,320 Très bien, alors regardons très regardez rapidement quelques exemples de ce que 1596 01:10:11,320 --> 01:10:12,820 nous pourrions faire avec les listes chaînées. 1597 01:10:12,820 --> 01:10:16,920 >> Donc, un exemple très rapide est, Supposons que nous voulons faire une recherche. 1598 01:10:16,920 --> 01:10:20,240 Quel genre de recherche ne peut pas nous faisons sur les listes chaînées? 1599 01:10:20,240 --> 01:10:21,150 >> AUDIENCE: Binary. 1600 01:10:21,150 --> 01:10:21,900 >> ENCEINTE 1: binaire. 1601 01:10:21,900 --> 01:10:23,408 Pourquoi ne pouvons-nous pas utiliser la recherche binaire? 1602 01:10:23,408 --> 01:10:25,181 >> AUDIENCE: [inaudible]. 1603 01:10:25,181 --> 01:10:28,180 ENCEINTE 1: droit, car avec binaire la recherche, nous avons dû compter sur le fait 1604 01:10:28,180 --> 01:10:31,300 que nous pourrions simplement sauter dans le tableau à tout moment. 1605 01:10:31,300 --> 01:10:33,420 Nous pourrions simplement dire, aller à l'élément intermédiaire. 1606 01:10:33,420 --> 01:10:35,550 Avec ici, comme nous avons dit un peu plus tôt, 1607 01:10:35,550 --> 01:10:37,270 nous ne pouvons pas simplement sauter à l'élément central. 1608 01:10:37,270 --> 01:10:38,978 Afin de trouver une élément, nous avons effectivement 1609 01:10:38,978 --> 01:10:40,780 avoir à marcher à travers l'ensemble de notre liste. 1610 01:10:40,780 --> 01:10:43,910 >> Donc, si nous voulions faire une recherche, le mieux que nous puissions faire est simplement une recherche linéaire. 1611 01:10:43,910 --> 01:10:45,910 Nous commençons à la tête, nous check-- disons que nous sommes 1612 01:10:45,910 --> 01:10:47,790 la recherche de 9-- nous commençons à la tête. 1613 01:10:47,790 --> 01:10:49,200 Nous disons, est-ce 9? 1614 01:10:49,200 --> 01:10:49,710 Non. 1615 01:10:49,710 --> 01:10:50,430 Est-ce 9? 1616 01:10:50,430 --> 01:10:50,930 Non. 1617 01:10:50,930 --> 01:10:51,620 Est-ce 9? 1618 01:10:51,620 --> 01:10:53,730 Oui, nous l'avons trouvé. 1619 01:10:53,730 --> 01:10:56,350 OK, voilà tout ce que. 1620 01:10:56,350 --> 01:10:57,940 Voici un peu de pseudo-code. 1621 01:10:57,940 --> 01:11:01,420 Je vais laisser cela pour vous les gars pour le taux de désabonnement plus sur votre propre, 1622 01:11:01,420 --> 01:11:04,370 juste parce que nous manquons un peu à court de temps. 1623 01:11:04,370 --> 01:11:05,610 >> Parlons de l'insertion. 1624 01:11:05,610 --> 01:11:08,644 Nous avons vu une démo vraiment cool de cette conférence dans laquelle nous disions, 1625 01:11:08,644 --> 01:11:11,560 OK, nous avons cette liste chaînée où chacun pointe vers une autre, 1626 01:11:11,560 --> 01:11:13,400 et quelqu'un arrive sur la scène. 1627 01:11:13,400 --> 01:11:17,050 Comment nous insérons-nous que personne dans notre liste chaînée? 1628 01:11:17,050 --> 01:11:20,150 Eh bien, une mauvaise façon de faire, qui est je pense que ce que nous avons vu en premier, 1629 01:11:20,150 --> 01:11:22,740 est lorsque la personne en avant automatiquement 1630 01:11:22,740 --> 01:11:25,270 souligné la nouvelle personne. 1631 01:11:25,270 --> 01:11:29,057 Et puis nous avons abandonné le genre de seconde moitié de la liste, à droite? 1632 01:11:29,057 --> 01:11:31,390 Parce que nous ne savons pas où il est dans la mémoire plus. 1633 01:11:31,390 --> 01:11:34,750 Donc, pour être très prudent au sujet de la ordre dans lequel nous insérons les choses. 1634 01:11:34,750 --> 01:11:37,860 >> Donc, ici, disons que nous voulons mettre 1 à l'avant de notre liste. 1635 01:11:37,860 --> 01:11:42,190 Tout d'abord, nous avons 1 point à la deuxième element-- ou l'élément 1636 01:11:42,190 --> 01:11:44,170 qui contient une. 1637 01:11:44,170 --> 01:11:47,210 Donc, nous faisons cela, juste pour que nous ne sommes pas va perdre au second semestre. 1638 01:11:47,210 --> 01:11:51,020 Et maintenant, nous pouvons avoir le point de la tête à 1. 1639 01:11:51,020 --> 01:11:52,930 Encore une fois, ceci est juste comme super haut niveau. 1640 01:11:52,930 --> 01:11:55,290 Voilà comment nous pourrions insérer un noeud. 1641 01:11:55,290 --> 01:11:57,337 Nous avons beaucoup de pseudo-code ici-- désolé, 1642 01:11:57,337 --> 01:11:59,170 Je ne sais pas pourquoi je suis appelant pseudo-code. 1643 01:11:59,170 --> 01:12:00,350 Il est code réel. 1644 01:12:00,350 --> 01:12:02,570 Vous pouvez aller vérifier plus tard. 1645 01:12:02,570 --> 01:12:04,870 >> Très bien, nous allons très quickly-- d'autres questions 1646 01:12:04,870 --> 01:12:07,120 sur les listes liées avant que je passer à un couple d'autres données 1647 01:12:07,120 --> 01:12:08,450 structures dans nos 10 dernières minutes. 1648 01:12:08,450 --> 01:12:10,340 >> AUDIENCE: Devons-nous maintenant comment l'écrire sur un test? 1649 01:12:10,340 --> 01:12:11,040 >> ENCEINTE 1: Avons-nous besoin de savoir comment to-- 1650 01:12:11,040 --> 01:12:12,030 >> AUDIENCE: Ecrire sur un test. 1651 01:12:12,030 --> 01:12:14,071 >> ENCEINTE 1: Nous devons to-- vous devriez être prêt 1652 01:12:14,071 --> 01:12:18,870 à écrire, insert, supprimer, rechercher des listes chaînées sur le test. 1653 01:12:18,870 --> 01:12:21,480 Voilà quelque chose que nous pourrait attendre que vous fassiez. 1654 01:12:21,480 --> 01:12:22,750 Il suffit d'aller sur elle. 1655 01:12:22,750 --> 01:12:26,460 Si vous avez des questions sur le code, tirer votre TF un email, 1656 01:12:26,460 --> 01:12:27,750 venir à des heures de bureau. 1657 01:12:27,750 --> 01:12:30,041 Il ya encore beaucoup de temps d'étudier, ne vous inquiétez pas. 1658 01:12:30,041 --> 01:12:32,290 Tout droit, toute l'autre questions sur les listes chaînées? 1659 01:12:32,290 --> 01:12:32,986 Oui. 1660 01:12:32,986 --> 01:12:37,360 >> Auditoire: Alors, si vous ne l'utilisez pointeur pour aller à la une sur le droit 1661 01:12:37,360 --> 01:12:41,308 avant d'utiliser le pointeur pour l'une sur le côté gauche, qui est 1662 01:12:41,308 --> 01:12:43,211 l'équivalent de la suppression tout, non? 1663 01:12:43,211 --> 01:12:43,877 ENCEINTE 1: Ouais. 1664 01:12:43,877 --> 01:12:44,820 AUDIENCE: [inaudible]. 1665 01:12:44,820 --> 01:12:47,570 ENCEINTE 1: droit, puisque nous ne pouvons pas l'obtenir, il est en fait encore pire. 1666 01:12:47,570 --> 01:12:50,690 Parce que non seulement nous ne savons pas où il est, nous ne pouvons plus l'utiliser, 1667 01:12:50,690 --> 01:12:53,580 mais nous ne sommes pas we've-- libérant plus que la mémoire. 1668 01:12:53,580 --> 01:12:58,570 Donc, il est tout simplement traîner et non être utile parce que nous ne pouvons pas le trouver. 1669 01:12:58,570 --> 01:12:59,580 Ouais, question cool. 1670 01:12:59,580 --> 01:13:01,280 >> Très bien, nous allons parler de piles. 1671 01:13:01,280 --> 01:13:03,230 Nous avons vu des piles très rapidement. 1672 01:13:03,230 --> 01:13:06,280 Ils sont d'abord dans la dernière structures de données sur. 1673 01:13:06,280 --> 01:13:10,664 Nous pensons donc que des piles dans Annenberg des plateaux où nous nous classons les choses sur le dessus. 1674 01:13:10,664 --> 01:13:12,580 Et si vous allez Venez vous un plateau, vous êtes 1675 01:13:12,580 --> 01:13:15,870 toujours va prendre celui sur le haut, ce qui est le plus recently-- 1676 01:13:15,870 --> 01:13:18,840 Quelle est la chose que nous avons plus a récemment mis sur le dessus de la pile. 1677 01:13:18,840 --> 01:13:22,680 Ainsi, vous pouvez sorte de penser à ce genre de visuel lorsque vous songez à piles. 1678 01:13:22,680 --> 01:13:26,010 Et puis, nous avons crevé quelque chose sur le dessus de la pile. 1679 01:13:26,010 --> 01:13:29,850 >> Si nous soient: oh, et les mots que nous utiliser quand nous parlons de ces données 1680 01:13:29,850 --> 01:13:32,680 structures est généralement, si nous mettre quelque chose sur la pile, 1681 01:13:32,680 --> 01:13:34,550 nous disons que nous pousser sur la pile. 1682 01:13:34,550 --> 01:13:38,450 Et si nous prenons quelque chose hors de la pile, nous disons que nous allons sauter hors de la pile. 1683 01:13:38,450 --> 01:13:41,470 Si vous allez mettre en œuvre un stack-- dont je doute 1684 01:13:41,470 --> 01:13:44,840 vous recommandons d'essayer out-- vous êtes allez vouloir garder une trace de, 1685 01:13:44,840 --> 01:13:46,669 disons que vous utilisez un tableau. 1686 01:13:46,669 --> 01:13:48,960 Je sais que nous avons parlé en conférence sur l'utilisation de deux matrices 1687 01:13:48,960 --> 01:13:51,120 ou des listes liées à la mise en œuvre d'une pile. 1688 01:13:51,120 --> 01:13:53,490 Si vous utilisez un tableau, vous devez keep-- 1689 01:13:53,490 --> 01:13:56,750 excuse moi-- nous avons besoin de garder une trace de la taille et de la capacité. 1690 01:13:56,750 --> 01:14:00,820 Ainsi, le nombre maximum que notre pile peut contenir. 1691 01:14:00,820 --> 01:14:03,240 Questions sur les piles? 1692 01:14:03,240 --> 01:14:05,657 >> Public: Quelle est la différence entre la taille et la capacité? 1693 01:14:05,657 --> 01:14:08,573 ENCEINTE 1: La différence entre taille et la capacité, question génial. 1694 01:14:08,573 --> 01:14:10,330 Donc, disons que nous sommes utilisant un tableau, et nous 1695 01:14:10,330 --> 01:14:13,340 allouer suffisamment de place pour 10 entiers. 1696 01:14:13,340 --> 01:14:15,050 Et nous commençons à remplir tout ça. 1697 01:14:15,050 --> 01:14:17,330 Et nous poussons les choses sur, et nous pop off choses. 1698 01:14:17,330 --> 01:14:21,060 Nous voulons garder une trace du maximum Numéro nous pouvons tenir, qui est la capacité. 1699 01:14:21,060 --> 01:14:24,790 Et nous voulons garder la trace de la nombre actuel que nous avons, qui est de taille. 1700 01:14:24,790 --> 01:14:26,530 Bonne question. 1701 01:14:26,530 --> 01:14:28,720 Tout le reste sur des piles? 1702 01:14:28,720 --> 01:14:31,260 Très bien, parlons à propos de surprise, les files d'attente. 1703 01:14:31,260 --> 01:14:37,034 >> Contrairement à piles, qui sont la première à la dernière out, ce sont d'abord entré, premier sorti. 1704 01:14:37,034 --> 01:14:38,450 Donc, cela est like-- penser à une ligne. 1705 01:14:38,450 --> 01:14:41,530 Pensez à la queue à l'Apple Store pour obtenir ce produit. 1706 01:14:41,530 --> 01:14:44,540 Et la première personne en ligne devrait être la première personne qui a aidé. 1707 01:14:44,540 --> 01:14:48,270 Donc la première chose qui a poussé est ce la première chose qui a sauté. 1708 01:14:48,270 --> 01:14:49,460 Bien? 1709 01:14:49,460 --> 01:14:52,890 Très similarly-- Oh, les mots qui nous utilisons au lieu de pousser et pop-- 1710 01:14:52,890 --> 01:14:55,060 que je viens d'utiliser, Je suis sorry-- est que nous disons, 1711 01:14:55,060 --> 01:14:58,170 si nous mettons quelque chose dans la file d'attente, nous disons en file d'attente il. 1712 01:14:58,170 --> 01:15:00,795 Si nous prenons quelque chose de la file d'attente, nous disons que nous dequeued. 1713 01:15:00,795 --> 01:15:01,950 Ce. 1714 01:15:01,950 --> 01:15:05,454 Je peux se prononcera ceux trompe, mais vous voyez l'idée. 1715 01:15:05,454 --> 01:15:08,370 Et là encore, tout comme les piles, si nous mettons en œuvre cette forme de tableau, 1716 01:15:08,370 --> 01:15:12,350 nous avons besoin de garder une trace de la la taille, la capacité, et la tête. 1717 01:15:12,350 --> 01:15:13,570 Qu'est-ce que je veux dire par la tête? 1718 01:15:13,570 --> 01:15:15,278 Pourquoi avons-nous besoin de garder piste de la tête? 1719 01:15:15,278 --> 01:15:18,549 1720 01:15:18,549 --> 01:15:21,685 >> AUDIENCE: Parce que est là le début de votre liste est. 1721 01:15:21,685 --> 01:15:24,810 ENCEINTE 1: Ouais, essentiellement la tête est où le début de notre file d'attente est. 1722 01:15:24,810 --> 01:15:29,460 Parce que nous savons, à la différence des piles, qui-- Je vais essayer de faire face à cette way-- 1723 01:15:29,460 --> 01:15:33,570 nous savons que cela va toujours réduire de cette façon et se développer de cette façon. 1724 01:15:33,570 --> 01:15:37,840 Les files d'attente, les gens viennent sur la fin et laissez depuis le début, 1725 01:15:37,840 --> 01:15:40,620 nous devons donc garder une trace d'où le départ est. 1726 01:15:40,620 --> 01:15:43,540 Voilà ce que je veux dire par nous devons garder une trace de l'endroit où la tête est. 1727 01:15:43,540 --> 01:15:45,190 Bien? 1728 01:15:45,190 --> 01:15:46,440 D'accord. 1729 01:15:46,440 --> 01:15:49,250 Huit minutes, en couple plusieurs sujets, nous pouvons le faire. 1730 01:15:49,250 --> 01:15:51,240 >> Tout droit, table de hachage. 1731 01:15:51,240 --> 01:15:53,095 Nous avons parlé très brièvement sur les tables de hachage. 1732 01:15:53,095 --> 01:15:55,720 Pour faire le quiz, vous avez juste besoin de les comprendre à un niveau élevé. 1733 01:15:55,720 --> 01:15:58,330 L'idée de base est que vous avez ces données. 1734 01:15:58,330 --> 01:16:02,570 Et nous voulons y accéder dans le temps qui est plus vite que quelque chose comme un lien 1735 01:16:02,570 --> 01:16:03,070 liste. 1736 01:16:03,070 --> 01:16:05,290 Parce que nous avons dit, si nous étions chercher dans une liste chaînée, 1737 01:16:05,290 --> 01:16:06,248 cela pourrait prendre du temps N. 1738 01:16:06,248 --> 01:16:08,810 Même l'accès peut prendre N fois dans une liste chaînée. 1739 01:16:08,810 --> 01:16:12,930 Les tables de hachage nous donner un moyen que nous pouvons accéder plus rapidement les choses, et plus 1740 01:16:12,930 --> 01:16:16,970 rechercher rapidement les choses, sans avoir les contraintes d'un tableau 1741 01:16:16,970 --> 01:16:19,030 où nous avons fixé la taille. 1742 01:16:19,030 --> 01:16:23,950 >> Nous pensons donc que d'une structure de données où, où nous mettons dans la structure de données 1743 01:16:23,950 --> 01:16:26,620 est dépendante de cette fonction de hachage magique. 1744 01:16:26,620 --> 01:16:30,630 Donc dans ce cas, le hachage magique fonction est en train de prendre un mot, 1745 01:16:30,630 --> 01:16:34,027 vérifier ce que la première lettre est, et puis juste les trier par ordre alphabétique. 1746 01:16:34,027 --> 01:16:36,110 Donc, nous avons essentiellement les mettons dans différents seaux. 1747 01:16:36,110 --> 01:16:39,510 Quand on voit la banane, nous disons, OK, nous allons mettre dans le seau B. 1748 01:16:39,510 --> 01:16:41,820 Quand nous voyons Apple, nous allons mettre dans l'un seau. 1749 01:16:41,820 --> 01:16:44,744 Si nous avons vu abricot, nous allons mettre dans l'un seau. 1750 01:16:44,744 --> 01:16:45,600 D'accord? 1751 01:16:45,600 --> 01:16:51,090 >> Donc suppose que je regardais, je pour-- Je ne sais pas, ce qui est un autre fruit? 1752 01:16:51,090 --> 01:16:52,920 Supposons que je cherchais orange. 1753 01:16:52,920 --> 01:16:55,340 Où dois-je chercher? 1754 01:16:55,340 --> 01:16:56,420 Dans le godet d'O. 1755 01:16:56,420 --> 01:17:01,450 Oui, il ya un seul endroit que l'orange pourrait être, OK? 1756 01:17:01,450 --> 01:17:05,370 Donc je l'ai dit ce qui se passe si-- bien je l'ai dit plus tôt, 1757 01:17:05,370 --> 01:17:10,030 disons que nous mettons abricot in-- mais je vraiment compte du fait que, oh non, 1758 01:17:10,030 --> 01:17:14,990 si je devais mettre en Berry, il est va entrer en conflit avec la banane. 1759 01:17:14,990 --> 01:17:20,160 Où nous mettons si il ya déjà quelque chose en notre table? 1760 01:17:20,160 --> 01:17:22,760 Eh bien, nous avons deux options. 1761 01:17:22,760 --> 01:17:26,160 >> Option numéro un est linéaire sondage, ce qui signifie essentiellement, 1762 01:17:26,160 --> 01:17:28,690 disons que je veux essayer de mettre Berry, et je vois, oh non, 1763 01:17:28,690 --> 01:17:31,170 bananes déjà là, Je dis juste OK, laissez- 1764 01:17:31,170 --> 01:17:33,810 me regarde pour la prochaine place disponible. 1765 01:17:33,810 --> 01:17:36,744 Donc, je descends, je dis, oh, il n'y a rien dans le seau D. 1766 01:17:36,744 --> 01:17:39,410 Je ne peux pas vraiment penser à des fruits qui commencent par la lettre D, 1767 01:17:39,410 --> 01:17:41,620 donc je vais juste mettre baies là. 1768 01:17:41,620 --> 01:17:42,650 Durian. 1769 01:17:42,650 --> 01:17:44,590 OK, donc puisqu'il ya rien là encore, 1770 01:17:44,590 --> 01:17:47,020 Je pourrais tout aussi bien utiliser cet endroit. 1771 01:17:47,020 --> 01:17:48,805 Quel est l'inconvénient de cela? 1772 01:17:48,805 --> 01:17:49,300 >> PUBLIC: Il est hors de commande. 1773 01:17:49,300 --> 01:17:50,008 >> ENCEINTE 1: Désolé? 1774 01:17:50,008 --> 01:17:51,280 PUBLIC: Il est hors de commande. 1775 01:17:51,280 --> 01:17:53,113 >> ENCEINTE 1: Il est out-- droite, nous pourrions nous retrouver 1776 01:17:53,113 --> 01:17:56,380 avec des choses qui ne sont pas in-- stocké dans des seaux dans la manière 1777 01:17:56,380 --> 01:17:57,790 que nous attendons qu'ils soient. 1778 01:17:57,790 --> 01:18:00,670 Donc, si nous étions à la recherche Berry, avant de nous l'avons dit, 1779 01:18:00,670 --> 01:18:02,000 Oh, nous pouvons regarder dans un seau. 1780 01:18:02,000 --> 01:18:03,650 Ce ne pouvait être dans un seau. 1781 01:18:03,650 --> 01:18:07,380 Mais maintenant, vraiment, il pourrait être dans tous les seaux, non? 1782 01:18:07,380 --> 01:18:10,400 >> OK, voici une autre option, chaining-- séparée 1783 01:18:10,400 --> 01:18:16,630 qui est l'idée que nous allons à utiliser un peu plus tard dans P situé à 5. 1784 01:18:16,630 --> 01:18:19,340 Plutôt que de simplement avoir un espace dans chaque godet, 1785 01:18:19,340 --> 01:18:23,610 pourquoi avons-nous pas chaque seau être un pointeur sur une liste chaînée? 1786 01:18:23,610 --> 01:18:28,570 Où nous disons, OK, il ya un seau pour tout ce qui commence par A. 1787 01:18:28,570 --> 01:18:31,990 Et il va juste être un lien liste des fruits qui commencent par A. 1788 01:18:31,990 --> 01:18:36,240 Donc, si nous obtenons un nouveau fruit, disons nous nous get-- avocat, nous avons pomme, 1789 01:18:36,240 --> 01:18:39,530 disons que nous obtenons d'abricot, comment pourrions-nous mettre dans la liste? 1790 01:18:39,530 --> 01:18:43,330 Eh bien, nous allions au seau 0, et nous aimerions il suffit d'insérer dans notre liste aimé, 1791 01:18:43,330 --> 01:18:45,320 aussi simple que cela. 1792 01:18:45,320 --> 01:18:47,160 >> Maintenant, je continue à dire seau. 1793 01:18:47,160 --> 01:18:49,470 Nous pourrions mettre en œuvre cette dans un certain nombre de façons. 1794 01:18:49,470 --> 01:18:52,040 Une façon typique que cette genre d'image suggère, 1795 01:18:52,040 --> 01:18:55,580 est peut-être comportant un réseau de pointeurs vers des listes liées. 1796 01:18:55,580 --> 01:18:58,174 Voilà une façon que nous pouvons mettre en œuvre une table de hachage. 1797 01:18:58,174 --> 01:19:01,090 Public: Seriez-vous besoin d'un autre liste parce que la banane et baies sont hors 1798 01:19:01,090 --> 01:19:01,591 de l'ordre? 1799 01:19:01,591 --> 01:19:03,298 ENCEINTE 1: Seriez-vous need-- ah, vous ne 1800 01:19:03,298 --> 01:19:06,310 besoin d'une autre liste, parce que la banane et de baies sont hors de commande? 1801 01:19:06,310 --> 01:19:09,880 Dans ce cas, notre fonction de hachage, qui nous dit où mettre les choses 1802 01:19:09,880 --> 01:19:11,647 ne se soucient pas de la deuxième lettre. 1803 01:19:11,647 --> 01:19:14,730 Il ne se soucie pas de classement par ordre alphabétique, il ne se soucie que la première lettre. 1804 01:19:14,730 --> 01:19:15,672 Question? 1805 01:19:15,672 --> 01:19:18,947 >> Public: Quelle est la définition de ce fonction, et ce que cela ressemble? 1806 01:19:18,947 --> 01:19:19,780 ENCEINTE 1: Ah, bon. 1807 01:19:19,780 --> 01:19:22,450 OK, donc nous ne devons pas vous inquiétez pas trop pour ce quiz. 1808 01:19:22,450 --> 01:19:23,700 Donc, je ne mettais pas dans les coulisses. 1809 01:19:23,700 --> 01:19:26,320 Nous allons être introduit à lui pour régler P 5. 1810 01:19:26,320 --> 01:19:31,520 Mais fondamentalement, dit-il, donné un nouvel élément, où dois-je le mettre? 1811 01:19:31,520 --> 01:19:35,450 Ou, disons que je suis à la recherche un élément, où peut-il être? 1812 01:19:35,450 --> 01:19:37,860 Ouais, bonne question. 1813 01:19:37,860 --> 01:19:40,870 >> OK, très rapidement, les arbres et les essais. 1814 01:19:40,870 --> 01:19:44,779 Ainsi, un arbre est simplement toute sorte de structure de données organisée. 1815 01:19:44,779 --> 01:19:47,820 Et nous allons voir beaucoup de photos qui fera de ce super clair. 1816 01:19:47,820 --> 01:19:51,180 Et un trie, que nous avons vu en classe, est un genre très spécial de l'arbre 1817 01:19:51,180 --> 01:19:53,440 qui fonctionne essentiellement comme une table de hachage multi-niveau. 1818 01:19:53,440 --> 01:19:54,390 C'est super cool. 1819 01:19:54,390 --> 01:19:56,030 Nous allons voir dans juste une seconde. 1820 01:19:56,030 --> 01:19:57,821 Très bien, nous allons donc parler des arbres en premier. 1821 01:19:57,821 --> 01:20:01,040 Donc, cela est par exemple très typique de un arbre, où nous avons une certaine hiérarchie. 1822 01:20:01,040 --> 01:20:03,220 Vous voyez que l'on est au en haut, à droite? 1823 01:20:03,220 --> 01:20:06,190 Et je peux dire haut parce qu'il ya clairement une commande parce que nous 1824 01:20:06,190 --> 01:20:08,260 ont ces flèches descendre. 1825 01:20:08,260 --> 01:20:11,740 Alors que, la chose en haut, Je demande que le nœud racine. 1826 01:20:11,740 --> 01:20:13,080 Donc, on est le nœud racine. 1827 01:20:13,080 --> 01:20:17,330 Et les choses au fond, qui ont rien de se détacher eux, 1828 01:20:17,330 --> 01:20:18,783 Je dis ce sont les nœuds feuilles. 1829 01:20:18,783 --> 01:20:22,730 Donc 8,9 5, 6, 7, OK. 1830 01:20:22,730 --> 01:20:27,740 Et généralement la terminologie de nous puisse dire est, 1 est la société mère de 3. 1831 01:20:27,740 --> 01:20:30,740 Donc, il est la chose qui vient d'un niveau au-dessus, et les points à elle. 1832 01:20:30,740 --> 01:20:32,710 Et 3 est de 1 enfant. 1833 01:20:32,710 --> 01:20:34,505 Il est la chose que 1 points à. 1834 01:20:34,505 --> 01:20:35,005 Question? 1835 01:20:35,005 --> 01:20:36,414 >> AUDIENCE: Pouvez-vous revenir à la diapositive précédente, s'il vous plaît? 1836 01:20:36,414 --> 01:20:37,388 >> ENCEINTE 1: Puis-je revenir à la diapositive précédente? 1837 01:20:37,388 --> 01:20:37,888 Bien sur. 1838 01:20:37,888 --> 01:20:40,640 1839 01:20:40,640 --> 01:20:41,390 Questions sur ce sujet? 1840 01:20:41,390 --> 01:20:42,764 Ou vous voulez juste pour le regarder? 1841 01:20:42,764 --> 01:20:44,650 AUDIENCE: Je ne l'ai pas passer au travers. 1842 01:20:44,650 --> 01:20:47,100 >> ENCEINTE 1: OK, cool, ouais. 1843 01:20:47,100 --> 01:20:49,846 Ce seront tous en ligne il ne faut pas vous soucier de chaque mot. 1844 01:20:49,846 --> 01:20:51,720 Et dans l'intérêt de temps, je vais aller. 1845 01:20:51,720 --> 01:20:53,270 Est-ce OK? 1846 01:20:53,270 --> 01:20:53,790 Impressionnant. 1847 01:20:53,790 --> 01:20:55,720 OK cool. 1848 01:20:55,720 --> 01:20:57,790 Donc, nous allons parler d'un kind-- très spécifiques 1849 01:20:57,790 --> 01:20:59,710 Nous avons donc ces générale structure des arbres, 1850 01:20:59,710 --> 01:21:02,876 qui est juste tout ce qui nous permet au genre de choses de rang hiérarchique. 1851 01:21:02,876 --> 01:21:06,000 1852 01:21:06,000 --> 01:21:11,110 >> Arbres binaires sont des choses où chaque noeud a au plus deux enfants. 1853 01:21:11,110 --> 01:21:11,690 D'accord? 1854 01:21:11,690 --> 01:21:14,560 Et je l'ai dit, OK, de sorte que semble pour correspondre à cette description. 1855 01:21:14,560 --> 01:21:16,830 Je l'ai dit noeud, pas un arbre de recherche binaire. 1856 01:21:16,830 --> 01:21:19,720 Qu'est-ce qu'un arbre binaire de recherche? 1857 01:21:19,720 --> 01:21:20,440 Il est triée. 1858 01:21:20,440 --> 01:21:22,890 Donc, vous savez que, dans un arbre de recherche binaire, 1859 01:21:22,890 --> 01:21:26,580 tout pour le tout tree-- aux nœuds gauche est plus petit, 1860 01:21:26,580 --> 01:21:28,830 et tout à la nœuds est juste plus grand. 1861 01:21:28,830 --> 01:21:30,620 Donc, ce ne sont pas un arbre de recherche binaire. 1862 01:21:30,620 --> 01:21:32,770 Ceci est juste un arbre binaire. 1863 01:21:32,770 --> 01:21:35,910 Donc, nous avons une grande catégorie de arbres, légèrement plus petite catégorie 1864 01:21:35,910 --> 01:21:40,106 des arbres binaires, recherche par A- arbres binaires de recherche. 1865 01:21:40,106 --> 01:21:41,540 Bien? 1866 01:21:41,540 --> 01:21:44,410 D'accord. 1867 01:21:44,410 --> 01:21:47,380 >> Et maintenant, plus fun de tous, nous avons nos essais. 1868 01:21:47,380 --> 01:21:49,500 Vous les gars a vu cette image dans la conférence? 1869 01:21:49,500 --> 01:21:51,790 Ouais, il devrait vous être familier de super. 1870 01:21:51,790 --> 01:21:54,252 Regardons comment nous pourrions effectivement mettre en œuvre. 1871 01:21:54,252 --> 01:21:56,210 Ou en fait, voyons, est-ce que même venir? 1872 01:21:56,210 --> 01:21:56,731 Non. 1873 01:21:56,731 --> 01:21:59,480 Très bien, nous ne même pas à soucier que le faible niveau des trucs. 1874 01:21:59,480 --> 01:22:02,320 Nous aurons beaucoup de temps pour aborder ensuite P mis 5. 1875 01:22:02,320 --> 01:22:05,780 Mais pour l'instant, juste très haut niveau, nous sachez que cela est à quoi il ressemble. 1876 01:22:05,780 --> 01:22:08,530 Nous l'avons décrit comme une sorte de une table de hachage multi-niveaux 1877 01:22:08,530 --> 01:22:12,264 where-- qu'est-ce que ce magasin? 1878 01:22:12,264 --> 01:22:14,430 Cette stocke les noms de scientifiques que nous pouvons réellement 1879 01:22:14,430 --> 01:22:20,690 chercher par juste sorte de suite à la différentes tables de hachage vers le bas, tout va bien? 1880 01:22:20,690 --> 01:22:24,730 >> Le but de ceci est, en théorie, ils fournissent constante de temps Look Up. 1881 01:22:24,730 --> 01:22:29,630 Donc, si je veux vérifier que, par exemple, qui est someone-- 1882 01:22:29,630 --> 01:22:33,410 qui se trouve dans cette Mandel trie, je pouvais très rapidement 1883 01:22:33,410 --> 01:22:36,260 dans linear-- Je suis désolé, en constante de temps, comprendre 1884 01:22:36,260 --> 01:22:39,010 si oui ou non il est dans le trie. 1885 01:22:39,010 --> 01:22:41,500 Mais un con, est de regarder l'ampleur de ce est. 1886 01:22:41,500 --> 01:22:44,120 Nous ne sommes même pas que le stockage beaucoup de données, et il est énorme. 1887 01:22:44,120 --> 01:22:47,950 Donc un gros con est qu'il utilise une grande quantité de mémoire. 1888 01:22:47,950 --> 01:22:48,746 Oui. 1889 01:22:48,746 --> 01:22:50,610 >> Public: Pourquoi faut-il fournir constante de temps, exactement? 1890 01:22:50,610 --> 01:22:51,376 >> ENCEINTE 1: Une fois de plus? 1891 01:22:51,376 --> 01:22:53,360 >> AUDIENCE: Quelle est l'intuition la raison pour laquelle il offre constante de temps? 1892 01:22:53,360 --> 01:22:54,610 >> ENCEINTE 1: Excellente question. 1893 01:22:54,610 --> 01:22:56,030 Pourquoi faut-il fournir constante de temps? 1894 01:22:56,030 --> 01:22:59,280 Donc, ce que nous pouvons faire est, nous allons disons que nous sommes à la recherche de Mandel. 1895 01:22:59,280 --> 01:23:02,830 Nous savons que nous voulons commencer dans le premier niveau à M. 1896 01:23:02,830 --> 01:23:06,890 Nous savons que nous voulons suivre à E. Donc, qui est de faire un pas, deux pas, non? 1897 01:23:06,890 --> 01:23:10,710 Nous suivons à N. Nous suivons à D. Nous suivons à E. Nous suivons à L. 1898 01:23:10,710 --> 01:23:15,100 Et puis la prochaine chose que nous vérifions says-- ce delta dit oui, que ce 1899 01:23:15,100 --> 01:23:15,990 dans notre tableau. 1900 01:23:15,990 --> 01:23:16,880 Voilà un mot. 1901 01:23:16,880 --> 01:23:19,900 Voilà une entrée valide dans notre trie. 1902 01:23:19,900 --> 01:23:22,450 Donc, vous dites, OK, qui a eu sept étapes. 1903 01:23:22,450 --> 01:23:27,200 Mais si nous avons ajouté comme un zillion plus scientifiques à cette structure de données, 1904 01:23:27,200 --> 01:23:29,470 nous ne serions pas avoir à vérifier un tas d'autres choses. 1905 01:23:29,470 --> 01:23:33,580 Nous ne va jamais avoir à prendre sept étapes, la longueur de la personne de 1906 01:23:33,580 --> 01:23:35,260 prénom. 1907 01:23:35,260 --> 01:23:39,350 >> Donc, nous aimons à penser d'exécution que, supposons 1908 01:23:39,350 --> 01:23:42,340 nous augmentons la taille de notre Structure de données, combien de temps 1909 01:23:42,340 --> 01:23:44,580 est ce que ça va prendre? 1910 01:23:44,580 --> 01:23:47,372 Dans ce cas, si l'on ajoute un tas plus de scientifiques, il n'a pas d'importance. 1911 01:23:47,372 --> 01:23:49,413 Il va toujours à prendre le même laps de temps. 1912 01:23:49,413 --> 01:23:50,350 Il est temps constant. 1913 01:23:50,350 --> 01:23:50,850 Oui. 1914 01:23:50,850 --> 01:23:53,557 >> Public: Comment savez-vous pas pour numériser sur les autres numéros? 1915 01:23:53,557 --> 01:23:54,932 ENCEINTE 1: Comment puis-je savoir comment to-- 1916 01:23:54,932 --> 01:23:58,236 AUDIENCE: Comme comment savez-vous que vous alliez directement à partir de M à E et non à M à A? 1917 01:23:58,236 --> 01:23:59,069 ENCEINTE 1: Oh, bien sûr. 1918 01:23:59,069 --> 01:24:01,620 Parce que je savais que je étais à la recherche du mot Mandel, 1919 01:24:01,620 --> 01:24:04,195 et je sais juste qu'il est M-E. Donc that-- oui, aller de l'avant. 1920 01:24:04,195 --> 01:24:06,528 AUDIENCE: Souhaitez-vous pas avoir à regarder les autres lettres 1921 01:24:06,528 --> 01:24:07,870 dans le reste de la [inaudible]? 1922 01:24:07,870 --> 01:24:10,020 >> ENCEINTE 1: Ah, je ne voudrais pas avoir à regarder the-- OK, très bien. 1923 01:24:10,020 --> 01:24:10,790 c'est une excellente question. 1924 01:24:10,790 --> 01:24:12,170 Cela dépend de la façon dont nous l'appliquer. 1925 01:24:12,170 --> 01:24:15,350 Si nous mettons en œuvre comme juste comme une série de tableaux 1926 01:24:15,350 --> 01:24:18,100 où nous savons que E est toujours à la position 0, 1927 01:24:18,100 --> 01:24:21,270 Je ne sais pas, quel que soit numéro d'index est à. 1928 01:24:21,270 --> 01:24:24,901 Oui, nous pouvons juste faire constante temps, ne, ne, ne, faire. 1929 01:24:24,901 --> 01:24:25,400 Bien. 1930 01:24:25,400 --> 01:24:27,556 Question là-bas? 1931 01:24:27,556 --> 01:24:30,927 >> Public: Est-constante de temps la même chose que le temps réel? 1932 01:24:30,927 --> 01:24:33,260 ENCEINTE 1: Est-constante de temps la même chose est en temps réel? 1933 01:24:33,260 --> 01:24:34,799 Je ne suis pas vraiment sûr en temps réel est. 1934 01:24:34,799 --> 01:24:36,965 Public: Durée Comme ça progresse littéralement deuxième 1935 01:24:36,965 --> 01:24:40,150 par seconde au lieu d'être une variable indépendante. 1936 01:24:40,150 --> 01:24:42,960 >> ENCEINTE 1: Oh, oui, vous peut penser de cette façon. 1937 01:24:42,960 --> 01:24:46,240 En d'autres termes, il est dépendant pas de la taille de la structure de données. 1938 01:24:46,240 --> 01:24:48,310 Voilà une façon de penser à elle. 1939 01:24:48,310 --> 01:24:50,510 D'autres questions? 1940 01:24:50,510 --> 01:24:53,120 Peut-être dans un premier temps en l'histoire, nous avons terminé à temps. 1941 01:24:53,120 --> 01:24:57,080 Si vous avez des questions, ne hésitez pas à venir nous demander, allez à la section, 1942 01:24:57,080 --> 01:25:00,190 parler à votre FO, bureau heures sont 08:00 et 8h30 1943 01:25:00,190 --> 01:25:03,985 à 11h00 le lundi et le mardi, de sorte il est un temps peu différent, 1944 01:25:03,985 --> 01:25:05,110 alors assurez-vous de noter que. 1945 01:25:05,110 --> 01:25:06,048 Oui. 1946 01:25:06,048 --> 01:25:08,673 >> Public: Est-ce que nous devons savoir des trucs comme arguments de ligne de commande, 1947 01:25:08,673 --> 01:25:10,360 ls tiret, tiret quel que soit? 1948 01:25:10,360 --> 01:25:11,840 >> ENCEINTE 1: ligne de commande des arguments et des commandes Linux, 1949 01:25:11,840 --> 01:25:13,010 Oui, vous avez besoin de connaître ceux. 1950 01:25:13,010 --> 01:25:18,234 Very-- il est comme le genre de niveau des trucs, nous avons couvert dans la section 0, 1951 01:25:18,234 --> 01:25:19,400 dans la mesure où les commandes Linux en déplacement. 1952 01:25:19,400 --> 01:25:20,942 >> PUBLIC: Les heures Annenberg? 1953 01:25:20,942 --> 01:25:23,525 ENCEINTE 1: heures de bureau, je ne suis pas entièrement sûr où ils sont. 1954 01:25:23,525 --> 01:25:25,980 Mais vous pouvez vérifier le site web, et il vous le dira. 1955 01:25:25,980 --> 01:25:27,499