1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [Lecture de musique] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> DAVIN: Très bien, les gars. 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 Voilà donc la revue pour la première quiz. 7 00:00:15,350 --> 00:00:17,751 Tout le monde est prêt pour le quiz le mercredi? 8 00:00:17,751 --> 00:00:18,292 ALLISON: Woo! 9 00:00:18,292 --> 00:00:18,743 L'ÉLÈVE: Woo! 10 00:00:18,743 --> 00:00:19,242 DAVIN: Ouais. 11 00:00:19,242 --> 00:00:19,920 ALLISON: Ouais! 12 00:00:19,920 --> 00:00:20,920 DAVIN: prêt-Ce gars. 13 00:00:20,920 --> 00:00:22,200 Ce gars-là, deux mains, agréable. 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 Alors examen de quiz aujourd'hui, ça va à environ une heure et demie. 16 00:00:25,900 --> 00:00:27,940 Nous allons passer en revue tous les grands concepts que vous devez savoir pour le quiz. 17 00:00:27,940 --> 00:00:31,434 Nous allons passer en revue certains codage par exemples de la main, qui sont à chaque questionnaire. 18 00:00:31,434 --> 00:00:34,350 Et si vous avez des questions, sentez-vous libre de lever la main et tout 19 00:00:34,350 --> 00:00:34,945 comme ça. 20 00:00:34,945 --> 00:00:36,695 Eh bien, la logistique sur le quiz en ligne. 21 00:00:36,695 --> 00:00:38,450 Donc, nous allons diviser les gens en différentes chambres. 22 00:00:38,450 --> 00:00:39,491 Il est basé sur leur nom. 23 00:00:39,491 --> 00:00:43,630 Donc, si vous avez des questions sur l'endroit où d'aller ou de ce matériau est, comme, 24 00:00:43,630 --> 00:00:46,810 le mot officiel sur ce qui se passe être sur le questionnaire, vérifier en ligne. 25 00:00:46,810 --> 00:00:48,420 Et qui est tout à jour. 26 00:00:48,420 --> 00:00:51,280 Donc, si il n'y a pas de questions à d'abord, nous allons commencer. 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 Et voici Allison. 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [CLAPS] 31 00:00:57,000 --> 00:00:59,300 >> ALLISON: OK, merci, Rob. 32 00:00:59,300 --> 00:01:00,280 L'apprécier. 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Davin aurait retourné à cela. 35 00:01:03,050 --> 00:01:07,240 Ceci est la liste non exhaustive des sujets, comme toujours, comme vient de le dire Davin. 36 00:01:07,240 --> 00:01:10,860 Consultez la documentation en ligne Quiz zéro. 37 00:01:10,860 --> 00:01:13,680 Mais cela est assez much-- il est sur le programme 38 00:01:13,680 --> 00:01:15,550 est tout ce que nous avons dépassé à ce jour. 39 00:01:15,550 --> 00:01:18,290 Tout ici est jeu juste, ainsi que toute autre chose 40 00:01:18,290 --> 00:01:21,380 qui peuvent avoir été mentionné dans la leçon. 41 00:01:21,380 --> 00:01:25,070 >> Ma section, ici, est juste un lot de contrôle. 42 00:01:25,070 --> 00:01:27,775 Il ya quelques exercices que vous avez peut travailler. 43 00:01:27,775 --> 00:01:30,650 Mais pour la plupart, nous avons vraiment que vous souhaitez obtenir Davin avec ceux du code 44 00:01:30,650 --> 00:01:31,710 par des exercices de la main. 45 00:01:31,710 --> 00:01:33,940 >> Donc, je vais voler à travers cela. 46 00:01:33,940 --> 00:01:36,330 Si vous avez des questions, arrêter moi. 47 00:01:36,330 --> 00:01:37,270 Levez la main. 48 00:01:37,270 --> 00:01:39,250 Je promets que je vais probablement vous vois. 49 00:01:39,250 --> 00:01:41,042 Si non, juste agiter autour. 50 00:01:41,042 --> 00:01:42,250 Je vais parler rapidement. 51 00:01:42,250 --> 00:01:43,950 Je souhaite tout le monde est OK avec ça. 52 00:01:43,950 --> 00:01:48,020 >> OK, mot spécial, Davin évidemment oublié de parcourir ces diapositives. 53 00:01:48,020 --> 00:01:51,880 [Rires] Vous êtes en difficulté, l'homme. 54 00:01:51,880 --> 00:01:55,770 Donc conseils pour questionnaire zéro, les pratiques de codage sur papier. 55 00:01:55,770 --> 00:01:58,950 Les gars, vous allez obtenir quelque pratiquer avec qui maintenant avec Davin, 56 00:01:58,950 --> 00:02:00,655 de sorte que vous ne serez pas complètement par vous-même. 57 00:02:00,655 --> 00:02:03,030 Je pense que nous allons en fait par ces deux fonctions. 58 00:02:03,030 --> 00:02:04,500 Alors vous serez bien préparé il. 59 00:02:04,500 --> 00:02:05,958 >> Familiarisez-vous avec vos ensembles de problèmes. 60 00:02:05,958 --> 00:02:08,150 Il ya eu des questions sur des questionnaires précédents 61 00:02:08,150 --> 00:02:12,680 qui vous demandera, par exemple, de coder quelque chose de très similaire à Mario. 62 00:02:12,680 --> 00:02:15,060 Donc, être très familier avec votre problème fixe, ainsi 63 00:02:15,060 --> 00:02:17,827 que les questions que nous vous demandons au début de la forme 64 00:02:17,827 --> 00:02:19,660 que vous remplissez, seront vous servir très bien. 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> Faire un quiz précédent sous les contraintes de temps. 67 00:02:23,380 --> 00:02:25,430 Ces questionnaires sont longs. 68 00:02:25,430 --> 00:02:26,850 Le temps passe très vite. 69 00:02:26,850 --> 00:02:30,480 Et souvent, vous ne réalisez pas combien vitesse il va jusqu'à ce que vous 70 00:02:30,480 --> 00:02:32,180 mettez-vous sous les contraintes. 71 00:02:32,180 --> 00:02:36,500 Donc, si vous ne pouvez tailler, vous le savez, 75 minutes, ce soir ou demain 72 00:02:36,500 --> 00:02:41,020 de prendre un de ces questionnaires sous que, vous serez en bien meilleure forme. 73 00:02:41,020 --> 00:02:43,060 >> Et aussi, la création de votre feuille de référence. 74 00:02:43,060 --> 00:02:45,290 Rappelez-vous, vous obtenez une Cette page avant et arrière 75 00:02:45,290 --> 00:02:47,040 comme référence pour votre quiz mercredi. 76 00:02:47,040 --> 00:02:49,074 Création qui est un excellent moyen pour étudier. 77 00:02:49,074 --> 00:02:51,990 Tout ce que vous avez de la difficulté vous souhaitez inclure là-bas. 78 00:02:51,990 --> 00:02:55,627 Tout ce que vos TF ont été, comme, ce qui est vraiment important. 79 00:02:55,627 --> 00:02:57,960 Vous devriez savoir cela, sont peut-être que tu as là-bas 80 00:02:57,960 --> 00:02:59,931 si vous ne les avez pas mémorisé. 81 00:02:59,931 --> 00:03:02,680 Même si vous ne les connaissez vraiment Eh bien, parfois avoir sur il 82 00:03:02,680 --> 00:03:07,030 est juste un peu de confort pour vous, que je connais quiz sont stressantes. 83 00:03:07,030 --> 00:03:09,260 Ainsi, tout le confort que vous obtenez peut vous aider. 84 00:03:09,260 --> 00:03:13,072 Tout droit, aussi, obtenir le sommeil et manger et aimer les choses normales 85 00:03:13,072 --> 00:03:14,280 que nous vous disons de quiz. 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> Ainsi, à partir de facile, types et tailles données. 88 00:03:18,890 --> 00:03:22,720 Comme je le disais, ce va juste pour être en me jetant un tas de choses 89 00:03:22,720 --> 00:03:24,320 ici que vous devez savoir. 90 00:03:24,320 --> 00:03:27,600 Nous avons donc nos caractères qui sont un octets, ints 91 00:03:27,600 --> 00:03:30,390 qui sont quatre octets de long de long, qui sont huit octets. 92 00:03:30,390 --> 00:03:33,280 Fondamentalement, il est juste que vous vouloir tenir des entiers plus grands. 93 00:03:33,280 --> 00:03:35,490 Flotteurs, qui sont quatre, doubles, qui sont huit. 94 00:03:35,490 --> 00:03:38,150 Encore une fois, vous donne juste plus espace pour vos flotteurs. 95 00:03:38,150 --> 00:03:41,290 Et puis tapez étoile, de sorte que toute pointeur sur une machine de 32 bits, 96 00:03:41,290 --> 00:03:44,650 qui est de tous vous les gars ont besoin à savoir, est de quatre octets. 97 00:03:44,650 --> 00:03:46,542 >> Donc, toutes les choses que vous devriez savoir, peut-être les choses 98 00:03:46,542 --> 00:03:48,250 vous voulez avoir sur votre feuille de référence. 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 OK, conversion binaire en binaire, conversion 101 00:03:53,520 --> 00:03:56,860 en hexadécimal, d'avant en arrière, toutes les choses que vous devez savoir. 102 00:03:56,860 --> 00:03:59,480 Donc, à partir de binaire en décimal. 103 00:03:59,480 --> 00:04:03,309 Les gars, vous voulez prendre une minute rapide et essayer de comprendre chacun de ces 104 00:04:03,309 --> 00:04:04,600 et dites-moi ce qu'ils sont? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> Je dois aussi des bonbons dans mon sac, donc tout le monde qui répond obtient des bonbons, par la manière. 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 Et je dois beaucoup. 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 Permettez-moi de saisir cette. 111 00:04:16,870 --> 00:04:18,480 Je vais donner ce à Gabe. 112 00:04:18,480 --> 00:04:21,829 Ainsi, vous pouvez donner des bonbons à celui qui est agréable et coopérative. 113 00:04:21,829 --> 00:04:23,490 >> OK, je l'ai vu une main dans le dos. 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> L'ÉLÈVE: Oui, le premier est de 42. 116 00:04:28,370 --> 00:04:30,280 >> Allison: Oui, premier est de 42, correct. 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 L'ÉLÈVE: [inaudible]. 119 00:04:32,038 --> 00:04:34,810 [Rires] 120 00:04:34,810 --> 00:04:37,030 ALLISON: seconde, il de retour en jaune? 121 00:04:37,030 --> 00:04:38,910 L'ÉLÈVE: 110010. 122 00:04:38,910 --> 00:04:43,410 ALLISON: Correct, et ce dernier, ici-bas sur le fond? 123 00:04:43,410 --> 00:04:44,570 Aussi, oui, vous savez voulez? 124 00:04:44,570 --> 00:04:45,550 Il suffit de jeter des bonbons. 125 00:04:45,550 --> 00:04:46,483 Que diriez-vous des bonbons pour tout le monde? 126 00:04:46,483 --> 00:04:47,510 >> L'ÉLÈVE: [inaudible] quand nous aurons fini. 127 00:04:47,510 --> 00:04:48,051 >> ALLISON: Shh. 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 Et puis le dernier. 130 00:04:50,910 --> 00:04:52,000 Qui veut répondre? 131 00:04:52,000 --> 00:04:52,744 Juste là. 132 00:04:52,744 --> 00:04:54,480 >> L'ÉLÈVE: 11100. 133 00:04:54,480 --> 00:04:56,820 >> ALLISON: 11100, regardez ça. 134 00:04:56,820 --> 00:04:58,790 Félicitations, excellent travail, tout le monde. 135 00:04:58,790 --> 00:05:03,370 OK, tout le monde sorte de comprendre le processus pour ce faire? 136 00:05:03,370 --> 00:05:08,700 Vous avez, passant de binaire en décimal la façon dont je tends à le faire, est en train d'écrire sur 137 00:05:08,700 --> 00:05:09,920 les puissances de 2. 138 00:05:09,920 --> 00:05:18,350 Alors je dis, OK, 0 fois 2 à 0, alors qui est égal à 0, 1 fois 2 à la première, 139 00:05:18,350 --> 00:05:21,400 est 2 va partir de cette façon. 140 00:05:21,400 --> 00:05:25,790 Quelqu'un veut me explicitement passer par un exemple de binaire? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 OK, cool. 143 00:05:28,140 --> 00:05:30,390 >> Décimal à binaire est très similaire. 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 Je tends à écrire les puissances de 2. 146 00:05:33,630 --> 00:05:38,660 Commencez par celui qui est le plus grand, mais ne va pas au-delà de la décimale 147 00:05:38,660 --> 00:05:39,710 que vous cherchez. 148 00:05:39,710 --> 00:05:42,870 Et puis sorte de travailler votre chemin en arrière en ajoutant des choses comme nécessaire. 149 00:05:42,870 --> 00:05:45,200 >> Et puis avec plus, il est comme l'addition normale. 150 00:05:45,200 --> 00:05:51,110 Si jamais vous avez le cas où vous êtes ajoutant deux 1, il devient évidemment 2. 151 00:05:51,110 --> 00:05:56,875 2 en binaire est maintenant 1 0 si vous avez besoin pour transporter votre 1 dans la colonne suivante. 152 00:05:56,875 --> 00:05:57,375 Laisser refroidir. 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> Hexadécimal, ce pourrait être quelque chose qui est un peu moins familier. 155 00:06:03,240 --> 00:06:06,600 Alors que Rob me disait justement au préalable, son truc pour ce 156 00:06:06,600 --> 00:06:10,210 est à juste scinder en quatre morceaux d'octets, OK? 157 00:06:10,210 --> 00:06:11,050 Bits, désolé. 158 00:06:11,050 --> 00:06:11,720 Voir? 159 00:06:11,720 --> 00:06:12,220 Merci Rob. 160 00:06:12,220 --> 00:06:15,874 Ceci est la raison pour laquelle vous êtes ici. [Bruit] OK, si nous rompons juste vers le haut 161 00:06:15,874 --> 00:06:16,790 en blocs de quatre bits. 162 00:06:16,790 --> 00:06:21,570 Donc, avec les binaires en code hexadécimal, nous regardons les 4 premiers, 163 00:06:21,570 --> 00:06:25,573 qui est si nous avons quatre 1 dans un rangée, ce nombre est-ce que symbolisent? 164 00:06:25,573 --> 00:06:26,540 >> L'ÉLÈVE: F. 165 00:06:26,540 --> 00:06:32,751 >> ALLISON: Donc dans ce cas, ce qui est 11111111 ou-- oui? 166 00:06:32,751 --> 00:06:33,250 L'ÉLÈVE: FF. 167 00:06:33,250 --> 00:06:34,600 ALLISON: Parfait, FF. 168 00:06:34,600 --> 00:06:36,900 Si grande, bonbons pour vous. 169 00:06:36,900 --> 00:06:41,100 Maintenant, pour savoir comment hexadécimal en binaire, nous il suffit de penser à ce sujet de sorte à l'envers. 170 00:06:41,100 --> 00:06:46,420 Pour chaque numéro ou une lettre qui nous avons dans notre hexadécimal, 171 00:06:46,420 --> 00:06:53,930 juste convertir à sa quatre bits [Rires] à sa conversion à quatre bits. 172 00:06:53,930 --> 00:06:58,696 Donc 5, dans ce cas, ce qui est 5 si nous représentons avec quatre bits? 173 00:06:58,696 --> 00:06:59,608 >> L'ÉLÈVE: 010? 174 00:06:59,608 --> 00:07:00,520 Mm-hm. 175 00:07:00,520 --> 00:07:03,605 Et puis A, qui est en fait 10, ce serait? 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010. 178 00:07:08,040 --> 00:07:09,670 Alors que nous avons, ici. 179 00:07:09,670 --> 00:07:13,990 Donc, la conversion entre hexadécimal et binaire est en fait pas si mal que ça. 180 00:07:13,990 --> 00:07:16,565 Si vous regardez dans quatre bits morceaux, vont être d'or. 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- oui? 183 00:07:19,300 --> 00:07:21,903 >> ROB: Ceci est ridicule, mais je me souviens toujours 184 00:07:21,903 --> 00:07:23,500 A, puisque A est censé être 10. 185 00:07:23,500 --> 00:07:26,230 Et binaire est juste 10 10, so-- 186 00:07:26,230 --> 00:07:27,310 >> ALLISON: Ah, là nous allons. 187 00:07:27,310 --> 00:07:28,615 >> ROB: Hey. 188 00:07:28,615 --> 00:07:30,020 >> ALLISON: Hey, bonbons pour Rob. 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 Il ya des choses non-chocolat là-dedans. 191 00:07:33,290 --> 00:07:34,180 Ainsi, vous pouvez avoir. 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 Donc mathématiques ASCII. 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 Se comporter. 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 Donc ASCII mathématiques, comme vous les gars probablement bien se rappeler 198 00:07:44,720 --> 00:07:48,480 p set 2 avec Visioneer et César, vous avez fait beaucoup de cela. 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 Rappelez-vous, les personnages sont fondamentalement que des chiffres. 201 00:07:51,980 --> 00:07:54,780 Donc, nous pouvons faire des maths avec eux, comme nous le faisons avec les mathématiques ints. 202 00:07:54,780 --> 00:07:58,090 >> Donc nous avons juste un peu chose simple ici. 203 00:07:58,090 --> 00:08:00,940 Nous en avons dans A qui est initialisé à 65. 204 00:08:00,940 --> 00:08:07,440 B et égale à la valeur ASCII d'un plus 1, char C égale à D moins 1, 205 00:08:07,440 --> 00:08:09,060 et de l'omble D égal à 68. 206 00:08:09,060 --> 00:08:13,130 Alors nous allons impression chacun d'eux, comme nous le voyons ici. 207 00:08:13,130 --> 00:08:15,650 Et quelqu'un peut me dire ce que cela va imprimer? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 L'ÉLÈVE: [inaudible]. 210 00:08:18,210 --> 00:08:20,540 ALLISON: Exactement, si une chose à remarquer est 211 00:08:20,540 --> 00:08:22,900 que nous imprimons sur caractères à chaque fois, ici. 212 00:08:22,900 --> 00:08:28,290 Nous désignons même si A et B sont ints quand nous les mentionnées ci-dessus. 213 00:08:28,290 --> 00:08:32,870 Nous leur impression par caractères le pour cent C et notre instruction printf, 214 00:08:32,870 --> 00:08:34,610 de sorte qu'ils seront tous imprimer sous forme de caractères. 215 00:08:34,610 --> 00:08:40,730 Et bien sûr, la volonté valeur ASCII 65 imprimer comme A. La valeur ASCII de A plus 1 216 00:08:40,730 --> 00:08:43,669 serait de 66, ce qui serait fier de B. Donc, en fait, nous 217 00:08:43,669 --> 00:08:49,107 obtenir A B C D. Tout le monde il bon? 218 00:08:49,107 --> 00:08:49,690 Des questions? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 Impressionnant. 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> OK, la portée. 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 Donc portée est évidemment une très chose importante à comprendre, ici. 225 00:08:59,950 --> 00:09:03,250 Beaucoup d'entre vous, si vous avoir des erreurs de compilation, 226 00:09:03,250 --> 00:09:06,085 et il dit que vous ne devez pas l'accès à une variable, 227 00:09:06,085 --> 00:09:08,540 il est probablement parce que vous il défini dans une boucle 228 00:09:08,540 --> 00:09:12,210 et puis essayé d'y accéder hors de lui, ou vice versa. 229 00:09:12,210 --> 00:09:16,410 >> Donc, portée à sa base, il détermine à l'endroit où 230 00:09:16,410 --> 00:09:20,800 nous disons une variable existe, où nous peut changer, où nous pouvons y accéder. 231 00:09:20,800 --> 00:09:24,550 Il est juste une sorte de dire ce sont des les seuls endroits où vous avez accès 232 00:09:24,550 --> 00:09:26,060 pour cette variable. 233 00:09:26,060 --> 00:09:30,080 >> Ainsi, les deux champs que nous parlons pendant la classe sont globales et locales. 234 00:09:30,080 --> 00:09:35,080 Donc, les variables globales dont nous parlons lorsque vous les définissez-dessus principal. 235 00:09:35,080 --> 00:09:38,390 Cela signifie que l'ensemble de votre programme a accès à elle, 236 00:09:38,390 --> 00:09:42,090 et il existe aussi longtemps comme les courses du programme, OK? 237 00:09:42,090 --> 00:09:45,100 Local signifie qu'il est plus confinée à une région. 238 00:09:45,100 --> 00:09:50,520 Donc, lorsque vous avez des fonctions spécifiques comme swap, nous parlons toujours. 239 00:09:50,520 --> 00:09:54,380 Nous parlons toujours de swap avec A et B. A et B existent à l'intérieur de cette fonction. 240 00:09:54,380 --> 00:09:55,690 Ils ne se retrouvent nulle part ailleurs. 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> De plus, quand vous avez si déclarations ou des boucles. 243 00:10:00,610 --> 00:10:04,670 Chaque fois que nous avons, par exemple, dans une boucle for nous avons int I est égale à 0. 244 00:10:04,670 --> 00:10:06,630 Nous avons certaines conditions et nous mettre à jour. 245 00:10:06,630 --> 00:10:10,270 Je existe que dans les accolades de cette boucle. 246 00:10:10,270 --> 00:10:13,270 Si vous essayez d'accéder ailleurs, votre compilateur crier à vous. 247 00:10:13,270 --> 00:10:14,560 Ce serait comme, qu'est-ce que vous essayez de faire? 248 00:10:14,560 --> 00:10:15,400 Cela ne pas exister. 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 Voilà donc les deux différents types de portée. 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 Cela fait-il sens à tout le monde? 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> Ainsi, par exemple ici, ce est juste un programme simple. 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 Qu'est-ce que vous en pensez est qui va se passer à chaque point 257 00:10:32,890 --> 00:10:34,210 que nous essayons d'imprimer? 258 00:10:34,210 --> 00:10:40,150 Alors celui-ci, ce qui va se passer? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 L'ÉLÈVE: Il imprimer trois. 261 00:10:44,255 --> 00:10:44,880 ALLISON: Droit. 262 00:10:44,880 --> 00:10:45,930 Il va imprimer trois. 263 00:10:45,930 --> 00:10:47,272 Qu'en est-il ici? 264 00:10:47,272 --> 00:10:48,230 L'ÉLÈVE: Il ne fonctionne pas. 265 00:10:48,230 --> 00:10:48,910 Allison: Cela ne marchera pas. 266 00:10:48,910 --> 00:10:50,290 Vous êtes hors de portée, non? 267 00:10:50,290 --> 00:10:55,160 Ne existe pas variable locale en dehors de ces accolades, d'accord? 268 00:10:55,160 --> 00:10:56,462 Et puis quoi ici? 269 00:10:56,462 --> 00:10:57,850 >> L'ÉLÈVE: [inaudible]. 270 00:10:57,850 --> 00:10:59,210 >> ALLISON: Quoi? 271 00:10:59,210 --> 00:10:59,900 Rob, allez. 272 00:10:59,900 --> 00:11:00,854 >> ROB: Je viens de dire. 273 00:11:00,854 --> 00:11:04,200 Les variables globales doivent être variable globale de soulignement. 274 00:11:04,200 --> 00:11:05,660 >> ALLISON: Ah, oui, désolé. 275 00:11:05,660 --> 00:11:06,200 Merci, Rob. 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 Rob comme notre compilateur résident. 278 00:11:10,170 --> 00:11:12,684 Il va juste crier à nous lorsque nous besoin. [Rires] Oui, ce 279 00:11:12,684 --> 00:11:14,225 devrait être variable globale de soulignement. 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 Donc, en supposant que ce était de soulignement mondial 282 00:11:18,430 --> 00:11:20,260 variables, ce qui va se passer ici? 283 00:11:20,260 --> 00:11:21,260 L'ÉLÈVE: Cela ne marchera. 284 00:11:21,260 --> 00:11:22,093 ALLISON: ça va marcher. 285 00:11:22,093 --> 00:11:24,655 Donc, il va imprimer, si juste un exemple très simple. 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 OK, prototypes. 288 00:11:29,870 --> 00:11:33,680 Alors, évidemment, nous avons vraiment souligner pour vous les gars 289 00:11:33,680 --> 00:11:36,460 pour faire fonctions si elle sens dans vos programmes. 290 00:11:36,460 --> 00:11:38,460 Mais bien sûr, quand vous faire vos propres fonctions, 291 00:11:38,460 --> 00:11:40,930 généralement vous les définissez après principal. 292 00:11:40,930 --> 00:11:42,430 Et vous allez essayer de les appeler en principal. 293 00:11:42,430 --> 00:11:46,030 Et si vous ne l'utilisez pas un prototype, votre compilateur va hurler à vous. 294 00:11:46,030 --> 00:11:49,590 >> Prototype est fondamentalement juste dire à votre compilateur 295 00:11:49,590 --> 00:11:52,400 que je dois cette fonction ci-dessous principale. 296 00:11:52,400 --> 00:11:54,970 Je vais l'appeler avant que je le définis. 297 00:11:54,970 --> 00:11:56,360 Tenir juste. 298 00:11:56,360 --> 00:12:00,660 Je vous promets qu'il est défini, et vous aura tout ce dont vous avez besoin. 299 00:12:00,660 --> 00:12:05,900 >> Donc, la façon dont nous faisons est juste votre retour le type, le nom de votre fonction, votre entrée 300 00:12:05,900 --> 00:12:06,400 liste. 301 00:12:06,400 --> 00:12:09,760 Il est essentiellement la première ligne de votre déclaration de fonction. 302 00:12:09,760 --> 00:12:11,510 Il est vraiment tout ce qu'il est. 303 00:12:11,510 --> 00:12:14,440 Mais ceci est juste un type général de forme. 304 00:12:14,440 --> 00:12:17,220 >> Ainsi, dans notre exemple, qui vous les gars devraient 305 00:12:17,220 --> 00:12:19,700 ont vu dans la section à un certain moment, nous avons 306 00:12:19,700 --> 00:12:23,220 un certain int cube que prend un certain int de l'entrée. 307 00:12:23,220 --> 00:12:25,870 Et nous avons notre principal fonction, qui appelle cube. 308 00:12:25,870 --> 00:12:28,670 Et cube est défini après le fait. 309 00:12:28,670 --> 00:12:34,450 >> Donc, si nous ne disposions pas d'entrée int cube au sommet, quand nous avons appelé cube 310 00:12:34,450 --> 00:12:36,620 dans principal, notre compilateur serait en colère contre nous. 311 00:12:36,620 --> 00:12:38,890 Ce serait comme, ce parlez-vous? 312 00:12:38,890 --> 00:12:40,360 Cube ne pas exister. 313 00:12:40,360 --> 00:12:41,910 Je ne sais pas ce que vous demandez. 314 00:12:41,910 --> 00:12:43,490 Et je vais arrêter. 315 00:12:43,490 --> 00:12:47,330 >> Mais parce que nous avons fait de notre prototype au sommet, nous l'avons dit, 316 00:12:47,330 --> 00:12:49,800 vous savez, quand vous voyez cube, ne vous inquiétez pas à ce sujet. 317 00:12:49,800 --> 00:12:51,990 Je vous promets qu'il est défini plus tard. 318 00:12:51,990 --> 00:12:53,750 Et il vous laisse faire ce que vous voulez. 319 00:12:53,750 --> 00:12:57,750 Donc si jamais vous avez une fonction qui est déclarée après que vous l'appelez 320 00:12:57,750 --> 00:13:00,570 pour la première fois, vous devez l'ont prototypé au sommet. 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> Oui? 323 00:13:02,720 --> 00:13:04,412 >> ROB: Il est carré, pas de cubage. 324 00:13:04,412 --> 00:13:05,855 >> Allison: Oh mon Dieu. 325 00:13:05,855 --> 00:13:09,435 Je ne l'ai pas have-- Gabe, je pensais vous étiez notre correcteur. 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 OK les gars, portent avec moi, ici. 328 00:13:12,760 --> 00:13:14,440 Je souhaite tout le monde faire passer l'idée. 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 OK, ce qui devrait avoir été carré, pas en cubes. 331 00:13:20,380 --> 00:13:22,700 Mais l'idée reste la même. 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 Toute fonction que nous appelons après le fait doit avoir un prototype. 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 Tout le monde bien avec qui? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 Toutes les autres fautes de frappe? 338 00:13:32,310 --> 00:13:32,810 Dáccord. 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 Toute faute de frappe ici avant de commencer, Rob? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [Rires] OK, donc structures. 343 00:13:42,380 --> 00:13:45,040 Fondamentalement, struct, vous permettent pour créer votre propre type de données. 344 00:13:45,040 --> 00:13:49,264 Donc, un peu comme un int ou un char ou un flotteur, il est juste un autre type. 345 00:13:49,264 --> 00:13:51,680 Je me plais à penser de ce que, comme, créer votre propre type de données. 346 00:13:51,680 --> 00:13:53,740 Donc, il vous permet de le faire. 347 00:13:53,740 --> 00:13:56,160 Et il contient différents types de données. 348 00:13:56,160 --> 00:14:01,030 >> Donc, si vous vous souvenez, dans un tableau, nous ne peut tenir les choses du même type. 349 00:14:01,030 --> 00:14:04,660 Structures nous permettent de contenir plusieurs choses de différents types. 350 00:14:04,660 --> 00:14:08,944 Donc dans ce cas là, nous avoir une structure appelée étudiants, 351 00:14:08,944 --> 00:14:10,650 nommé ici en bas. 352 00:14:10,650 --> 00:14:13,540 Et nous avons un certain int id et un nom de chaîne. 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 Donc, ceci est juste un autre type de données. 355 00:14:17,300 --> 00:14:18,950 Nous avons maintenant un type de données appelé étudiant. 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> Donc, parce que nous pouvons penser comme tout autre type de données, 358 00:14:24,750 --> 00:14:27,760 nous pouvons déclarer des variables comme nous le ferions tout autre. 359 00:14:27,760 --> 00:14:32,680 Ainsi, au lieu d'avoir juste, comme, un int étudiant, nous avons juste un étudiant, 360 00:14:32,680 --> 00:14:33,390 1 étudiant. 361 00:14:33,390 --> 00:14:33,560 Oh, regarde. 362 00:14:33,560 --> 00:14:34,059 Il est Rob. 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 Nous sommes donc ici déclarant une structure, ou une variable 365 00:14:38,880 --> 00:14:40,940 appelé étudiant 1 de type étudiant. 366 00:14:40,940 --> 00:14:45,370 Donc, il va falloir id et le nom qui lui est associé. 367 00:14:45,370 --> 00:14:48,430 >> Et la façon dont nous accéder à ces éléments au sein de notre structure 368 00:14:48,430 --> 00:14:50,100 est avec l'opérateur point, ici. 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 Donc dans ce cas, nous déclaré un étudiant 1. 371 00:14:54,660 --> 00:14:57,080 Nous avons attribué l'ID à 1. 372 00:14:57,080 --> 00:14:58,840 Et nous avons attribué le nom de Rob être. 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 OK, tout le monde bien avec qui? 375 00:15:04,960 --> 00:15:06,787 Utilisez-le like-- juste oui? 376 00:15:06,787 --> 00:15:09,530 >> L'ÉLÈVE: Oui, quand typedef-- devons-nous utiliser typedef? 377 00:15:09,530 --> 00:15:13,190 >> Allison: Alors typedef juste dit that-- Rob, vous 378 00:15:13,190 --> 00:15:16,990 peut me corriger si je suis ce wrong-- mais typedef est juste de déclarer réellement 379 00:15:16,990 --> 00:15:19,330 comme un type que vous pouvez utiliser, non? 380 00:15:19,330 --> 00:15:22,550 >> ROB: Ouais, il est fondamentalement, il est donc juste créer 381 00:15:22,550 --> 00:15:24,215 un alias ou un pseudonyme pour un type. 382 00:15:24,215 --> 00:15:25,590 Ainsi, vous pouvez taper que [inaudible]. 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 Donc, [inaudible] existe, et maintenant nous avons juste 385 00:15:30,350 --> 00:15:32,090 [Inaudible] des moyens exactement la même chose. 386 00:15:32,090 --> 00:15:37,210 Et ici, nous sommes tapé, je pense, un certain type 2 struct [inaudible]. 387 00:15:37,210 --> 00:15:40,680 Donc, il est juste un surnom pour un type donné. 388 00:15:40,680 --> 00:15:44,344 >> L'ÉLÈVE: String bibliothèque [inaudible] a été tapé comme l'omble étoiles. 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> ALLISON: Pour nos besoins ici, si vous déclarer une structure, 391 00:15:54,390 --> 00:15:55,600 il suffit de faire typedef struct. 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 OK, si au préalable, cela est juste une variable normale ici. 394 00:16:04,490 --> 00:16:06,390 Nous y accédons par un point. 395 00:16:06,390 --> 00:16:08,580 si nous avons un pointeur vers une structure, nous pouvons 396 00:16:08,580 --> 00:16:10,700 utiliser une flèche, qui est plutôt cool. 397 00:16:10,700 --> 00:16:17,130 >> Donc dans ce cas, nous avons un pointeur vers un étudiant 1 qui est de type étudiant. 398 00:16:17,130 --> 00:16:19,020 Rappelez-vous, avec votre construction de pointeur, 399 00:16:19,020 --> 00:16:23,710 vous voulez tout type pointeur pointe vers soit au début. 400 00:16:23,710 --> 00:16:25,960 Donc, nous avons un étudiant 1, ici. 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 Et depuis cet étudiant 1 est maintenant un objet pointu, 403 00:16:31,050 --> 00:16:36,520 nous pouvons aller élève nom 1 flèche au lieu de point, car il est un pointeur, 404 00:16:36,520 --> 00:16:37,640 et attribuer Rob. 405 00:16:37,640 --> 00:16:40,720 Et maintenant, si nous voulons Rob changer de Davin, 406 00:16:40,720 --> 00:16:43,570 cela est juste de vous montrer une autre façon de faire. 407 00:16:43,570 --> 00:16:48,850 >> Ainsi, au lieu d'utiliser la flèche, vous peut also-- Je vais terminer cette puis 408 00:16:48,850 --> 00:16:52,860 prendre que vous pourriez question-- faire également étudiant de référence 1. 409 00:16:52,860 --> 00:16:56,170 Cela dit, comme aller à tout ce qui est à 1 étudiant, qui 410 00:16:56,170 --> 00:16:58,840 serait notre structure d'étudiant. 411 00:16:58,840 --> 00:17:03,910 Accéder avec un point et l'élément que vous voulez, et puis le réaffecter. 412 00:17:03,910 --> 00:17:05,326 Il y avait une question. 413 00:17:05,326 --> 00:17:08,034 L'ÉLÈVE: Oui, comment se fait-il à utiliser [inaudible] lorsque vous êtes 414 00:17:08,034 --> 00:17:10,367 faisant étoiles étudiant sans [Inaudible] étudiant? 415 00:17:10,367 --> 00:17:12,200 ALLISON: Parce que ce est la création d'un pointeur. 416 00:17:12,200 --> 00:17:13,616 ROB: Nous allons en parler. 417 00:17:13,616 --> 00:17:16,119 Allison: Nous allons parler à ce sujet plus tard dans la revue. 418 00:17:16,119 --> 00:17:17,660 Il suffit donc de garder cette pensée. 419 00:17:17,660 --> 00:17:20,560 Si cela vous dérange encore à la fin, venir parler à l'un de nous. 420 00:17:20,560 --> 00:17:23,380 >> Donc, ce font exactement la même chose. 421 00:17:23,380 --> 00:17:25,579 Nous sommes en train de vous montrer deux différentes façons de le faire. 422 00:17:25,579 --> 00:17:29,470 Étudiant 1 est maintenant un pointeur, donc vous pouvez accéder à l'élément de Nom 423 00:17:29,470 --> 00:17:30,960 à l'intérieur de la structure d'une flèche. 424 00:17:30,960 --> 00:17:36,440 Ou vous pouvez déréférencer le pointeur, et puis y accéder comme vous le feriez normalement. 425 00:17:36,440 --> 00:17:38,430 Est-ce que cela a un sens pour tout le monde? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 Si l'ensemble des choses de pointeur sont un peu confusion, Gabe parler, 428 00:17:43,890 --> 00:17:45,740 et puis peut-être cette aura plus de sens. 429 00:17:45,740 --> 00:17:46,240 Oui? 430 00:17:46,240 --> 00:17:48,387 >> L'ÉLÈVE: Oui, alors comment est ce différent de la? 431 00:17:48,387 --> 00:17:49,470 ALLISON: le précédent? 432 00:17:49,470 --> 00:17:52,330 Ainsi l'étudiant 1 dans cette cas est pas un pointeur. 433 00:17:52,330 --> 00:17:54,380 Il est juste votre structure réelle. 434 00:17:54,380 --> 00:17:55,400 >> L'ÉLÈVE: OK. 435 00:17:55,400 --> 00:17:57,645 >> Allison: Alors que celui-ci est un pointeur vers une struct. 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> L'ÉLÈVE: OK, mais est-ce genre de finissent par travailler le même [inaudible]. 438 00:18:02,060 --> 00:18:03,310 >> ALLISON: Il fonctionne effectivement la même. 439 00:18:03,310 --> 00:18:04,560 Votre syntaxe est juste différent. 440 00:18:04,560 --> 00:18:05,185 L'ÉLÈVE: OK. 441 00:18:05,185 --> 00:18:07,600 >> Allison: Oui, ils sont effectivement les mêmes. 442 00:18:07,600 --> 00:18:11,321 Il est juste en fonction du contexte, vous voudrez peut-être l'un sur l'autre. 443 00:18:11,321 --> 00:18:11,820 Oui? 444 00:18:11,820 --> 00:18:13,956 >> L'ÉLÈVE: Quand vous faites les références à la 1-- 445 00:18:13,956 --> 00:18:14,580 ALLISON: Mm-hm? 446 00:18:14,580 --> 00:18:16,880 ÉTUDIANT: Pourquoi vous faire ont les parenthèses? 447 00:18:16,880 --> 00:18:19,575 ALLISON: Parce étudiant 1 est le pointeur. 448 00:18:19,575 --> 00:18:22,200 Donc, vous devez vous assurer que vous êtes juste déréférencement du pointeur. 449 00:18:22,200 --> 00:18:23,380 >> L'ÉLÈVE: OK. 450 00:18:23,380 --> 00:18:26,700 >> ALLISON: Donc dans ce cas ici, les parenthèses autour d'elle 451 00:18:26,700 --> 00:18:29,875 signifie que vous êtes étudiant déréférencement 1. 452 00:18:29,875 --> 00:18:35,390 Donc, vous allez à l'endroit où l'étudiant 1 points, ce qui est votre structure. 453 00:18:35,390 --> 00:18:38,010 Donc maintenant vous pouvez penser de celui-ci en tant que structure, 454 00:18:38,010 --> 00:18:39,785 afin que nous puissions utiliser notre opération de point normal. 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 D'autres questions? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 Cool, super. 459 00:18:48,120 --> 00:18:51,359 >> Donc, dernière chose, je pense que est ma dernière diapositive, woo! 460 00:18:51,359 --> 00:18:52,775 OK, le point imprécision si flottant. 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 Nous avons parlé brièvement cette conférence au cours. 463 00:18:56,820 --> 00:19:00,030 Fondamentalement, nous avons une infinité de nombres réels. 464 00:19:00,030 --> 00:19:02,237 Et si l'un de vous les gars aimer les mathématiques, il ya 465 00:19:02,237 --> 00:19:03,570 toutes sortes de trucs cool avec nous. 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> Mais il ya une infinité nombres réels. 468 00:19:07,190 --> 00:19:09,850 Mais ils sont seulement fini le nombre de bits que nous avons. 469 00:19:09,850 --> 00:19:13,240 Donc, vous allez toujours ont imprécision, est tout. 470 00:19:13,240 --> 00:19:16,269 Et voilà que tout semble se comme quelque chose que vous devez savoir. 471 00:19:16,269 --> 00:19:19,060 Ce que nous pouvons vous demander pourquoi ne virgule flottante imprécision existe? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 Il suffit donc de quelque chose que vous devez savoir. 474 00:19:21,420 --> 00:19:23,770 Et avec cela, je me tourne au-dessus de pointeurs. 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> BINKY: Bonjour, les gars. 477 00:19:28,520 --> 00:19:29,616 Binky de mon nom. 478 00:19:29,616 --> 00:19:30,990 Je vais parler de pointeurs. 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 Ouais, donc des pointeurs est en fait ma partie préférée dans ce cours. 481 00:19:35,830 --> 00:19:39,740 Il suffit donc de préciser ce que Allison a été question ici, de sorte que la raison 482 00:19:39,740 --> 00:19:43,810 pourquoi-- la seule différence ici, La grande différence est la manière 483 00:19:43,810 --> 00:19:44,760 nous déclarons choses. 484 00:19:44,760 --> 00:19:47,560 Donc étoiles étudiant signifie cette est un pointeur vers un étudiant. 485 00:19:47,560 --> 00:19:52,960 Alors que la lame avant, est un étudiant struct réelle, comme un étudiant réel, 486 00:19:52,960 --> 00:19:54,400 contenant aucune de ces choses. 487 00:19:54,400 --> 00:19:57,050 >> Et la raison pour laquelle nous vouloir to-- oui, Davin? 488 00:19:57,050 --> 00:19:58,630 >> DAVIN: Qu'est-ce que la flèche signifie? 489 00:19:58,630 --> 00:20:04,240 >> BINKY: Les moyens de direction exactement les mêmes que ce produit. 490 00:20:04,240 --> 00:20:06,150 Donc, on n'a pas vraiment besoin de la flèche. 491 00:20:06,150 --> 00:20:11,060 Comme, si vous êtes seul programme En C, vous pouvez simplement utiliser cette fonctionnalité. 492 00:20:11,060 --> 00:20:12,850 Désolé, je ne sais pas ce qui est. 493 00:20:12,850 --> 00:20:14,920 Vous pouvez simplement utiliser cette syntaxe. 494 00:20:14,920 --> 00:20:17,430 >> Mais certaines personnes, quand ils concevaient C, 495 00:20:17,430 --> 00:20:19,870 ils ont pensé que les gens utilisé cette syntaxe tellement, 496 00:20:19,870 --> 00:20:23,970 qu'ils aiment juste de venir avec une structure de syntaxe pour cela. 497 00:20:23,970 --> 00:20:26,820 Et cela a eu lieu dans la forme de cette flèche. 498 00:20:26,820 --> 00:20:29,210 Et il est vraiment agréable, parce que il symbolise quelque chose 499 00:20:29,210 --> 00:20:33,670 comme nous sommes en train de suivre cette flèche, ce pointeur, 500 00:20:33,670 --> 00:20:35,300 vers l'espace dans la mémoire. 501 00:20:35,300 --> 00:20:40,410 Et quand nous y serons, nous voulons regarder le nom de l'élève, 502 00:20:40,410 --> 00:20:42,150 si cela fait sens. 503 00:20:42,150 --> 00:20:43,000 D'accord? 504 00:20:43,000 --> 00:20:44,290 >> Donc, ce sont exactement les mêmes. 505 00:20:44,290 --> 00:20:46,310 Ceci est exactement la même chose que cela. 506 00:20:46,310 --> 00:20:48,130 Ils se compilés exactement la même, OK? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 Et la raison pourquoi ici nous malloc quelque chose, parce que dans ce cas, 509 00:20:55,580 --> 00:20:59,120 notre variable est réellement juste une variable pointeur. 510 00:20:59,120 --> 00:21:02,900 Donc, nous avons seulement un peu d'espace dans mémoire qui est titulaire d'un pointeur. 511 00:21:02,900 --> 00:21:06,570 Nous ne disposons pas vraiment d'espace qui détient la structure réelle. 512 00:21:06,570 --> 00:21:08,660 >> Donc, ce qui doit être fait en deux étapes. 513 00:21:08,660 --> 00:21:11,545 Nous devons créer la la mémoire à la mise en structure. 514 00:21:11,545 --> 00:21:14,445 Et nous devons créer la mémoire pour mettre le pointeur en. 515 00:21:14,445 --> 00:21:16,570 Ils sont donc essentiellement deux différentes variables, ici. 516 00:21:16,570 --> 00:21:19,730 L'un d'eux est de type étudiant, sauf qu'il n'a pas vraiment un nom. 517 00:21:19,730 --> 00:21:21,900 Et l'autre est Type de l'étudiant étoiles. 518 00:21:21,900 --> 00:21:24,900 Et puis étudiant 1 points là, si ce sens. 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 D'accord? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> Donc, la raison pour laquelle nous utilisons pointeurs est que tout 523 00:21:31,860 --> 00:21:35,510 dans un ordinateur, toutes les variables dans un ordinateur a deux choses. 524 00:21:35,510 --> 00:21:36,580 Il a sa valeur. 525 00:21:36,580 --> 00:21:38,420 Et il a son adresse. 526 00:21:38,420 --> 00:21:41,390 Et une bonne façon de conceptualiser ce est qu'il n'y a 527 00:21:41,390 --> 00:21:44,230 de nombreux problèmes lorsque vous essayer d'utiliser les fonctions. 528 00:21:44,230 --> 00:21:47,200 Et nous allons essayer de se pencher sur l'un de ceux. 529 00:21:47,200 --> 00:21:50,370 A savoir, il va penser de la mémoire comme des boîtes. 530 00:21:50,370 --> 00:21:52,810 >> Vous avez toujours pensé que des variables quand vous dites na est égal à 5. 531 00:21:52,810 --> 00:21:54,430 Vous pensez que de mettre 5 dans une boîte. 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 Alors que faire si vous voulez passer que int dans une fonction? 534 00:22:00,030 --> 00:22:03,230 Vous pass-- juste que je ne sais pas know-- x dans une fonction. 535 00:22:03,230 --> 00:22:06,090 Mais ce qui se passe est normalement en tant qu'êtres humains, vous 536 00:22:06,090 --> 00:22:09,050 pourrait penser quelque chose comme je suis passage de la boîte à une personne. 537 00:22:09,050 --> 00:22:12,070 Et il n'a pas vraiment arriver dans les ordinateurs. 538 00:22:12,070 --> 00:22:17,770 Ce qui se passe est que vous copiez la valeur de la boîte de la boîte de la personne. 539 00:22:17,770 --> 00:22:22,440 >> Donc ce que je veux dire est que si vous avez un function-- sorry-- ici, 540 00:22:22,440 --> 00:22:27,700 si nous avons une fonction comme à cinq jusqu'à là, si vous essayez de passer une variable, 541 00:22:27,700 --> 00:22:29,450 il va tout simplement à copier. 542 00:22:29,450 --> 00:22:35,771 Si un nx d'initialisation est égal à 3, il va pour copier cette valeur à la variable a 543 00:22:35,771 --> 00:22:36,270 là-haut. 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 OK, et ce genre est de la raison pourquoi nous voulons utiliser des pointeurs. 546 00:22:39,630 --> 00:22:42,550 En raison de la place donnant juste la valeur, 547 00:22:42,550 --> 00:22:44,850 au lieu de simplement en passant juste la valeur d'une fonction, 548 00:22:44,850 --> 00:22:46,530 nous voulons passer par référence. 549 00:22:46,530 --> 00:22:50,630 Ce que nous appelons passe par référence est en quelque sorte de donner la boîte à la fonction, 550 00:22:50,630 --> 00:22:53,890 de sorte que la fonction peut également changer les valeurs dans cette boîte. 551 00:22:53,890 --> 00:22:57,280 >> OK, si quelques-uns pointeur de base choses est de créer des pointeurs, 552 00:22:57,280 --> 00:23:00,300 vous venez de le déclarer un type, et vous mettez une étoile juste après. 553 00:23:00,300 --> 00:23:02,307 Et le type est juste ce que vous montrant. 554 00:23:02,307 --> 00:23:04,390 Donc, si il est un int étoiles, vous pointez un int. 555 00:23:04,390 --> 00:23:05,940 Si il est une star de char, vous montrant un graphique. 556 00:23:05,940 --> 00:23:07,790 Et si elle est une star de l'étudiant, vous pointez un étudiant. 557 00:23:07,790 --> 00:23:08,770 D'accord? 558 00:23:08,770 --> 00:23:10,510 >> Et ils sont tous les 4 octets de long. 559 00:23:10,510 --> 00:23:13,010 Parce que cette variable il ne fait pas réellement 560 00:23:13,010 --> 00:23:15,380 besoin de tenir un char, un int, ou un étudiant. 561 00:23:15,380 --> 00:23:16,890 Il suffit de tenir un discours. 562 00:23:16,890 --> 00:23:21,390 Voilà pourquoi ils sont tous les 4 octets longue dans une machine de 32 bits normale. 563 00:23:21,390 --> 00:23:21,890 D'accord? 564 00:23:21,890 --> 00:23:25,600 Donc, ici, x est une variable qui indique à un int. Y points à char. des points z 565 00:23:25,600 --> 00:23:26,580 à un flotteur. 566 00:23:26,580 --> 00:23:27,480 Toute question ici? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 Laisser refroidir. 569 00:23:30,340 --> 00:23:32,550 Et il ya deux ils ont des symboles différents 570 00:23:32,550 --> 00:23:34,341 garder à l'esprit lorsque venir au pointeur. 571 00:23:34,341 --> 00:23:36,540 Donc, le référencement et la déréférencement sont les plus grands. 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 Donc, l'esperluette de la nom de la variable que vous la donne? 574 00:23:41,602 --> 00:23:42,310 L'ÉLÈVE: Adresse. 575 00:23:42,310 --> 00:23:43,380 BINKY: Adresse. 576 00:23:43,380 --> 00:23:47,330 Donc, si vous déclarez un int est égal à 5, puis esperluette 577 00:23:47,330 --> 00:23:49,214 d'un va vous donner l'adresse. 578 00:23:49,214 --> 00:23:51,130 Et vous pouvez réellement essayer d'imprimer et que voir 579 00:23:51,130 --> 00:23:54,640 quelle adresse en mémoire votre variable a. 580 00:23:54,640 --> 00:23:57,380 Et puis dereferencing-- de sorte que faisait référence, 581 00:23:57,380 --> 00:24:00,380 obtenir le déréférencement address-- est l'exact opposé. 582 00:24:00,380 --> 00:24:04,120 OK, tout comme le temps est en face d'une division, 583 00:24:04,120 --> 00:24:06,060 étoiles est à l'opposé de esperluette. 584 00:24:06,060 --> 00:24:09,710 Alors moyens déréférencement y aller. 585 00:24:09,710 --> 00:24:14,280 Donc, si vous donnez star-- je ne pas know-- 50, qui est 586 00:24:14,280 --> 00:24:20,320 vais essayer d'aller à l'adresse de nombre de 50 à l'intérieur de votre ordinateur. 587 00:24:20,320 --> 00:24:22,840 OK, pourquoi voyons-nous qu'ils sont opposés? 588 00:24:22,840 --> 00:24:27,320 Parce que ce qui se passe si vous faites quelque chose comme une étoile esperluette? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 Eh bien, une esperluette vous donne l'adresse d'une variable, l'adresse d'un. 591 00:24:33,460 --> 00:24:35,830 Mais étoile signifie y aller. 592 00:24:35,830 --> 00:24:38,930 >> Donc ce qui arrive si vous aller à l'adresse d'un? 593 00:24:38,930 --> 00:24:40,400 Vous obtenez juste une, non? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 Donc, aller à l'adresse de un est la même chose qu'un. 596 00:24:43,600 --> 00:24:47,580 Voilà pourquoi ils sont généralement renvoyée à la same-- cette 597 00:24:47,580 --> 00:24:50,480 et ce sont appelées opérateurs comme opposées. 598 00:24:50,480 --> 00:24:50,980 D'accord? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 So cool. 601 00:24:53,790 --> 00:24:57,240 >> Sous le capot, par exemple, si nous déclarons int x est égal à 5, 602 00:24:57,240 --> 00:24:58,040 nous avons une variable. 603 00:24:58,040 --> 00:25:00,790 Et rappelez-vous que je l'ai dit tout variable-- et cela est une bonne chose 604 00:25:00,790 --> 00:25:03,820 de garder à l'mind-- il a deux différentes choses associé avec. 605 00:25:03,820 --> 00:25:06,460 Il dispose d'un compte et d'une valeur. 606 00:25:06,460 --> 00:25:07,140 D'accord? 607 00:25:07,140 --> 00:25:09,180 >> Ainsi, la valeur est dans ce cas 5. 608 00:25:09,180 --> 00:25:12,140 Et l'adresse est-- disons, je suis faire quelque chose up-- il est 0x04. 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 Et la seule raison pour laquelle nous avons l'habitude représenter les adresses en hexadécimal 611 00:25:17,200 --> 00:25:19,770 est un, parce qu'il est comme le bon. 612 00:25:19,770 --> 00:25:21,600 Il va bien avec binaire. 613 00:25:21,600 --> 00:25:23,500 Il est facile de convertir vers et à partir binaire. 614 00:25:23,500 --> 00:25:26,890 Et ce ne soit pas trop grande si vous avez un très grand nombre. 615 00:25:26,890 --> 00:25:29,990 Donc, nous aimons utiliser hexadécimal dans les adresses d'impression. 616 00:25:29,990 --> 00:25:31,890 Mais je ne pouvais représenter cette forme d'entier. 617 00:25:31,890 --> 00:25:32,750 Il est très bien. 618 00:25:32,750 --> 00:25:35,450 >> Et il a une adresse 4 et une valeur de 5. 619 00:25:35,450 --> 00:25:38,080 Et puis je l'ai dit pointeur int étoiles. 620 00:25:38,080 --> 00:25:40,070 Donc ceci est un autre type, avis. 621 00:25:40,070 --> 00:25:43,220 Int pointeur étoiles est égal l'adresse de x. 622 00:25:43,220 --> 00:25:46,425 Alors, que va être la valeur de ptr? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 Ça va être la adresse de x, ici-bas. 625 00:25:51,600 --> 00:25:54,190 OK, donc la valeur va être la même que l'adresse. 626 00:25:54,190 --> 00:25:56,130 Voilà la mission fonctionne que je fais. 627 00:25:56,130 --> 00:25:59,380 Et puis ptr va avoir sa propre adresse, qui se révèle, 628 00:25:59,380 --> 00:26:02,050 dans ce cas, la 8, OK? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> Et puis je crée une nouvelle copie entier. 631 00:26:05,900 --> 00:26:08,790 Et je dis int copie est égale à y aller. 632 00:26:08,790 --> 00:26:11,140 Alors, allez à ce ptr pointe. 633 00:26:11,140 --> 00:26:13,940 Eh bien, ce que cette ptr ont? 634 00:26:13,940 --> 00:26:14,740 Ptr a 0x04. 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 Qu'advient-il si je tente d'y aller? 637 00:26:18,400 --> 00:26:23,650 Je vais trouver le gars qui a adresse x et qui a l'adresse 4. 638 00:26:23,650 --> 00:26:25,970 Et qui a l'adresse quatre est x. 639 00:26:25,970 --> 00:26:26,950 Est-ce logique? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 Oui? 642 00:26:28,795 --> 00:26:32,060 >> L'ÉLÈVE: Dans ce cas, est le pointeur dans une pile? 643 00:26:32,060 --> 00:26:36,024 >> BINKY: Dans ce cas, it's-- bonne question. 644 00:26:36,024 --> 00:26:38,690 Je ne pense pas vraiment à ce sujet lors de la constitution de ces adresses. 645 00:26:38,690 --> 00:26:42,570 Mais si cela est, comme tous ce sont des variables locales, 646 00:26:42,570 --> 00:26:46,372 alors x va vivre in-- tout va vivre dans la pile. 647 00:26:46,372 --> 00:26:48,330 Donc tout va être pointant à empiler. 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 Vous obtenez seulement le tas quand vous commencez à utiliser malloc, non? 650 00:26:52,700 --> 00:26:59,430 >> Donc, si vous vous souvenez de la pile est à chaque fois vous appelez une fonction dans votre programme, 651 00:26:59,430 --> 00:27:02,800 comme, par exemple principal, ou toute autre fonction, comme printf. 652 00:27:02,800 --> 00:27:06,334 Toutes les variables locales sont allez obtenir mis dans un cadre de pile. 653 00:27:06,334 --> 00:27:08,500 Et ils vont obtenir comme entassés dans la pile. 654 00:27:08,500 --> 00:27:09,930 Voilà ce qu'on appelle une pile. 655 00:27:09,930 --> 00:27:12,200 Et toutes ces variables locales vont être là. 656 00:27:12,200 --> 00:27:14,940 Et la heap-- et nous allons pour parler plus sur ce later-- 657 00:27:14,940 --> 00:27:19,050 le tas est là tous allouée dynamiquement vie de mémoire. 658 00:27:19,050 --> 00:27:20,270 Cool? 659 00:27:20,270 --> 00:27:21,680 >> Nous allons à cette diapositive. 660 00:27:21,680 --> 00:27:22,800 Oui? 661 00:27:22,800 --> 00:27:25,490 >> ÉTUDIANT: Pourquoi pas int copie 0x04 retour? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> BINKY: Pourquoi pas int copie 0x04 retour? 664 00:27:30,066 --> 00:27:32,450 >> ÉTUDIANT: Pourquoi est-ce pas [inaudible]? 665 00:27:32,450 --> 00:27:35,530 >> BINKY: Parce que ce qui est une valeur de ptr? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> L'ÉLÈVE: 0x04. 668 00:27:38,370 --> 00:27:38,960 >> BINKY: 0x04. 669 00:27:38,960 --> 00:27:40,910 Qu'advient-il si vous allez à 0x04? 670 00:27:40,910 --> 00:27:41,620 Qu'est-ce que vous obtenez? 671 00:27:41,620 --> 00:27:42,371 >> L'ÉLÈVE: Oh, OK. 672 00:27:42,371 --> 00:27:42,995 BINKY: Vous voyez? 673 00:27:42,995 --> 00:27:43,536 L'ÉLÈVE: Oui. 674 00:27:43,536 --> 00:27:44,890 BINKY: Donc, vous obtenez 5. 675 00:27:44,890 --> 00:27:49,170 Donc copie va avoir 5, si cela fait sens. 676 00:27:49,170 --> 00:27:49,809 Oui? 677 00:27:49,809 --> 00:27:52,803 >> L'ÉLÈVE: Pourrions-nous avoir obtenu 5 dans la boîte de valeur [inaudible] 678 00:27:52,803 --> 00:27:55,300 si nous mettons int copier [inaudible]. 679 00:27:55,300 --> 00:27:56,710 >> BINKY: Int-- nous le ferions, ouais. 680 00:27:56,710 --> 00:27:59,080 Cela aurait fait à peu près la même chose. 681 00:27:59,080 --> 00:28:02,080 Mais de cette façon, nous pouvons passer répondre à des fonctions. 682 00:28:02,080 --> 00:28:05,050 Et qui est le truc cool nous allons faire maintenant. 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> Donc, ce genre d'exercice est toujours on-- vient très souvent sur des questionnaires. 685 00:28:13,090 --> 00:28:15,870 Donc, il est vraiment bon d'essayer de faire ce genre de chose vous-même. 686 00:28:15,870 --> 00:28:21,210 Donc, essayez de garder une trace de ce que l'adresse est et que vous voulez les valeurs des variables 687 00:28:21,210 --> 00:28:22,620 sont à chaque point. 688 00:28:22,620 --> 00:28:24,370 Donc, ceci est exactement ce que nous allons faire. 689 00:28:24,370 --> 00:28:26,988 Ici, nous avons étapes, un, deux, trois, quatre, cinq. 690 00:28:26,988 --> 00:28:30,530 Un, deux, trois, quatre, cinq. 691 00:28:30,530 --> 00:28:33,330 Et nous allons suivre les valeurs de x et a. 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> Alors, que ce qui est fait, si cela est un Code buggy, nous essayons de faire à cinq. 694 00:28:40,530 --> 00:28:43,610 Donc, nous essayons d'obtenir dans un variable et changer sa valeur à 5. 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 Et rappelez-vous mon analogie d'avoir un boîte et remettre la boîte à quelqu'un? 697 00:28:49,900 --> 00:28:51,515 Alors principal a appelé cette case x. 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 Et elle contient la valeur 3. 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 Et je suis en train de remettre cette boîte à cinq. 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> Et je tiens à cinq pour changer la valeur de cette boîte à cinq. 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 Et puis je vous suffit d'imprimer la valeur de x. 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 Ceci est ce que mon function-- voilà ce que je suis en train de faire. 708 00:29:08,850 --> 00:29:12,450 Je suis juste essayer de mettre à jour la valeur de x à 5. 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 Est-il clair que la fonction fait? 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> OK, alors qu'est-ce que va être la valeurs de x et un ici, 713 00:29:21,440 --> 00:29:27,734 la première ligne, juste avant la première line-- je say-- du programme? 714 00:29:27,734 --> 00:29:28,940 >> L'ÉLÈVE: Probablement ordures. 715 00:29:28,940 --> 00:29:30,023 >> BINKY: Juste ordures choses. 716 00:29:30,023 --> 00:29:32,590 Donc, je viens de mettre N / A. Si nous ne savons pas vraiment. 717 00:29:32,590 --> 00:29:37,400 Comme, un n'a même existe pas encore, parce que nous ne sommes pas appelés à cinq. 718 00:29:37,400 --> 00:29:38,980 Int est un pas déclaré. 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 Et x va exister ici, mais nous avons pas vraiment 721 00:29:42,920 --> 00:29:45,370 attribué aucune valeur à, donc OK? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> Et puis, qu'est-ce que va être la valeurs de x et un nombre à deux? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> L'ÉLÈVE: [inaudible]. 726 00:29:55,410 --> 00:29:57,540 >> BINKY: Donc, x va être 3. 727 00:29:57,540 --> 00:29:59,650 Rien de plus simple, parce que nous assignons à 3 il. 728 00:29:59,650 --> 00:30:03,500 Et un ne existe pas encore car un juste vit dans cinq. 729 00:30:03,500 --> 00:30:05,800 Donc, je vais avoir 3 et rien. 730 00:30:05,800 --> 00:30:08,590 ou comme des ordures, que ce soit, pas vraiment défini. 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 Et maintenant, voici la ligne importante. 733 00:30:13,140 --> 00:30:14,931 Ici, nous allons fait appel à cinq. 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 Et rappelez-vous ce que je disais. 736 00:30:18,680 --> 00:30:20,240 Nous ne transmettons jamais dans la boîte. 737 00:30:20,240 --> 00:30:23,110 Nous copions juste la valeur de la boîte à une autre boîte. 738 00:30:23,110 --> 00:30:27,000 Voilà tous les ordinateurs, copiez choses d'un endroit à l'autre. 739 00:30:27,000 --> 00:30:33,550 >> Donc, pour cinq ans, ce qu'il fait Est-il copie la valeur de x à un. 740 00:30:33,550 --> 00:30:35,130 Alors, que va être ici? 741 00:30:35,130 --> 00:30:36,210 Les valeurs de x et a. 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 et 3, nous allons simplement copier au-dessus de x à un. 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 Laisser refroidir. 746 00:30:45,320 --> 00:30:46,140 >> Maintenant, nous sommes ici. 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 Et maintenant, nous allons à mettre à jour est égale à un 5. 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 Qu'est-ce qui va se passer dans la quatrième ligne? 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> L'ÉLÈVE: [inaudible]. 753 00:30:56,010 --> 00:30:59,685 >> BINKY: un est mis à jour, mais x ne sont pas mis à jour. 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 Parce x vit encore en principal, il est un complètement différent bloc de mémoire. 756 00:31:05,250 --> 00:31:06,970 Il est une autre variable. 757 00:31:06,970 --> 00:31:07,900 un autre est variable. 758 00:31:07,900 --> 00:31:10,000 Ils arrive d'avoir la même valeur parce que je 759 00:31:10,000 --> 00:31:13,980 copié sur la valeur de x à un. 760 00:31:13,980 --> 00:31:20,070 Mais maintenant, quand je fais un égal 5, il ne pas effectuer réellement x en aucune façon. 761 00:31:20,070 --> 00:31:21,450 Ceci est la partie délicate. 762 00:31:21,450 --> 00:31:23,380 Est-il judicieux pour tout le monde? 763 00:31:23,380 --> 00:31:24,093 Oui? 764 00:31:24,093 --> 00:31:25,717 L'ÉLÈVE: Une dernière question, vous avez 3. 765 00:31:25,717 --> 00:31:27,741 Pourquoi un already-- oh, non, il est 3. 766 00:31:27,741 --> 00:31:28,490 Désolé, ça ne fait rien. 767 00:31:28,490 --> 00:31:29,310 Je lis 5. 768 00:31:29,310 --> 00:31:30,415 >> BINKY: Ouais, 3, 3. 769 00:31:30,415 --> 00:31:31,540 >> L'ÉLÈVE: [inaudible], ouais. 770 00:31:31,540 --> 00:31:35,290 BINKY: Et puis nous attribuons à 5 un, mais ne change pas vraiment x. 771 00:31:35,290 --> 00:31:36,369 Bonne? 772 00:31:36,369 --> 00:31:36,910 L'ÉLÈVE: Oui. 773 00:31:36,910 --> 00:31:37,410 BINKY: Oui? 774 00:31:37,410 --> 00:31:42,330 Pouvez-vous expliquer à nouveau comment un est copié [inaudible]? 775 00:31:42,330 --> 00:31:48,480 >> BINKY: OK, donc quand vous appelez à cinq de x, si cette ligne de code ici. 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 à cinq de x, ce qui est x? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 x est à seulement 3 en ce moment, non? 780 00:31:58,340 --> 00:32:03,320 Ainsi, vous pouvez juste penser à mettre 3 ici et oublier x. 781 00:32:03,320 --> 00:32:04,410 Il suffit de mettre un 3 ici. 782 00:32:04,410 --> 00:32:10,880 Comme, nous allons copier sur le valeur de x à l'int un qui est là-haut. 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 D'accord? 785 00:32:13,630 --> 00:32:14,780 >> Ainsi, la valeur de x est 3. 786 00:32:14,780 --> 00:32:17,680 Nous allons copier sur 3 à un. 787 00:32:17,680 --> 00:32:20,040 Et cet autre bloc de mémoire, cette autre variable 788 00:32:20,040 --> 00:32:22,640 appelé une aura 3, ainsi. 789 00:32:22,640 --> 00:32:23,580 Est-ce logique? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 Oui? 792 00:32:25,794 --> 00:32:31,008 >> ÉTUDIANT: Si vous donnez à cinq comme ont comme nombre entier x au lieu d'un, 793 00:32:31,008 --> 00:32:32,910 serait que tout arranger? 794 00:32:32,910 --> 00:32:36,290 >> BINKY: Si il est une integer-- pas, ce ne serait pas tout régler. 795 00:32:36,290 --> 00:32:37,590 Voilà donc une très bonne question. 796 00:32:37,590 --> 00:32:40,480 Il n'a pas vraiment d'importance ce que vous appelez ces variables. 797 00:32:40,480 --> 00:32:44,510 Encore une fois, ce sera une question de portée, parce qu'ils ne sont pas la même x. 798 00:32:44,510 --> 00:32:46,526 Ils sont complètement dans différents espaces mémoire. 799 00:32:46,526 --> 00:32:47,400 L'ÉLÈVE: [inaudible]. 800 00:32:47,400 --> 00:32:49,020 BINKY: il ne le fait pas vraiment Peu importe ce que vous les appelez. 801 00:32:49,020 --> 00:32:50,480 Cela ne résout pas les choses, OK? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 Plus de questions? 804 00:32:54,430 --> 00:32:55,762 Oui? 805 00:32:55,762 --> 00:32:58,498 >> L'ÉLÈVE: Comment est-il de retour à nombre de cinq [inaudible]? 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 BINKY: OK, nous avons pas encore fait. 808 00:33:01,160 --> 00:33:03,432 Allons au numéro cinq, alors. 809 00:33:03,432 --> 00:33:04,650 >> L'ÉLÈVE: [inaudible]? 810 00:33:04,650 --> 00:33:05,565 >> BINKY: Quoi? 811 00:33:05,565 --> 00:33:08,179 >> L'ÉLÈVE: Avez-vous un retour à tous? 812 00:33:08,179 --> 00:33:09,970 BINKY: Nous ne disposons pas un retour, pas de principal. 813 00:33:09,970 --> 00:33:12,940 Cependant, les principales renvoie 0 automatiquement si vous ne retournez pas rien. 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 Oui? 816 00:33:15,188 --> 00:33:22,658 >> L'ÉLÈVE: Pourriez-vous faire main-- ou pourriez-vous faire à cinq retour un? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> BINKY: Nous pourrions avoir à cinq retourner une, oui. 819 00:33:27,990 --> 00:33:32,527 Mais alors que nous aurions à attribuer x est égale à la valeur de retour de cinq, 820 00:33:32,527 --> 00:33:34,360 ce qui serait un peu programme différent. 821 00:33:34,360 --> 00:33:35,440 Il pourrait fonctionner. 822 00:33:35,440 --> 00:33:38,730 Mais ce que nous voulons faire est ce qui est appelé changer quelque chose à la place. 823 00:33:38,730 --> 00:33:41,690 Donc, nous voulons réellement changer cette boîte et vous inquiétez pas 824 00:33:41,690 --> 00:33:44,390 d'avoir à retourner valeurs ou quoi que ce soit. 825 00:33:44,390 --> 00:33:44,890 D'accord? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> Ceci est juste comme la fonction de permutation David a montré en conférence, sauf que je suis 828 00:33:50,150 --> 00:33:51,740 seulement face à une variable. 829 00:33:51,740 --> 00:33:55,960 Et il a utilisé deux, donc int a et b et puis variable temporaire et ainsi de suite. 830 00:33:55,960 --> 00:33:57,020 D'accord? 831 00:33:57,020 --> 00:33:58,070 Alors, quelle est la dernière ligne? 832 00:33:58,070 --> 00:34:04,400 Après cinq retours, il est simplement l'un va aller. 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 Nous ne verrons plus un, et seulement x sera toujours vivre. 835 00:34:10,179 --> 00:34:12,130 >> Et devinez quoi? x ne pas modifier sa valeur, 836 00:34:12,130 --> 00:34:15,520 après tout, parce que nous sommes seulement en changeant la valeur de a. 837 00:34:15,520 --> 00:34:17,370 Voilà pourquoi x était de 3 partout. 838 00:34:17,370 --> 00:34:17,870 D'accord? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 Bon. 841 00:34:21,130 --> 00:34:23,560 Donc, ce programme ne réaliser ce que nous voulions. 842 00:34:23,560 --> 00:34:24,760 Maintenant, nous allons régler le problème. 843 00:34:24,760 --> 00:34:27,440 >> Et le programme de correction est l'utilisation de pointeurs. 844 00:34:27,440 --> 00:34:32,300 Ce que nous faisons est que nous avons trois les lignes qui sont différentes. 845 00:34:32,300 --> 00:34:34,020 Les premiers est que nous sommes ne passent pas x. 846 00:34:34,020 --> 00:34:35,535 Nous passons l'adresse de x. 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 Ainsi, au lieu de copier sur la valeur de la boîte, 849 00:34:40,876 --> 00:34:42,500 Je vais quand même de copier quelque chose. 850 00:34:42,500 --> 00:34:45,380 Mais je suis sur la copie l'adresse de la boîte. 851 00:34:45,380 --> 00:34:48,780 >> Donc, si je passe l'adresse de la boîte à cinq, puis à cinq 852 00:34:48,780 --> 00:34:51,560 sera en mesure de constater que dans mémoire et changer sa valeur. 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> Alors et alors là, je dois que ne constitue pas un int plus. 855 00:34:59,580 --> 00:35:00,882 a est un int étoiles. 856 00:35:00,882 --> 00:35:02,090 Il est un pointeur sur un entier. 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 Et puis, parce que je suis de passage le adresse ici, et puis ce que je fais 859 00:35:07,310 --> 00:35:10,530 est pas un est égal à 5, parce que un tient une adresse. 860 00:35:10,530 --> 00:35:16,710 Donc ce que je veux faire est d'aller là-bas et mettre à jour le contenu de cette adresse 861 00:35:16,710 --> 00:35:18,305 à 5. 862 00:35:18,305 --> 00:35:21,130 >> OK, donc nous allons passer par l'ensemble de lignes une par une. 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 Alors, quand je commence ici, je avoir toujours N / A, N / A, N / A 865 00:35:26,024 --> 00:35:28,440 pour tout dans la première ligne, parce que je ne ai pas vraiment 866 00:35:28,440 --> 00:35:29,390 encore déclaré choses. 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 Et puis la deuxième ligne, je dois x est égal à 3. 869 00:35:35,110 --> 00:35:38,020 Un int étoiles A ne pas exister, même chose qu'avant. 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> Maintenant, ça devient intéressant. 872 00:35:40,640 --> 00:35:42,300 Donc, je vais passer. 873 00:35:42,300 --> 00:35:45,720 Et supposons que l'adresse de x est 12 en hexadécimal. 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 Disons simplement supposer cela. 876 00:35:48,420 --> 00:35:49,221 Je l'ai fait jusqu'à. 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 Donc, ce que je passais ici est un à cinq. 879 00:35:53,500 --> 00:35:54,460 Je suis de passage 12. 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> Alors quelle valeur ont un? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> L'ÉLÈVE: [inaudible]. 884 00:36:06,210 --> 00:36:06,950 >> BINKY: Désolé? 885 00:36:06,950 --> 00:36:08,145 >> L'ÉLÈVE: [inaudible]. 886 00:36:08,145 --> 00:36:10,520 BINKY: Ouais, comme, à laisser de supposons que nous sommes ici, maintenant. 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 Je demande. 889 00:36:12,040 --> 00:36:12,915 >> L'ÉLÈVE: [inaudible]. 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> BINKY: Il a été initié. 892 00:36:14,890 --> 00:36:15,860 >> L'ÉLÈVE: [inaudible]. 893 00:36:15,860 --> 00:36:17,985 BINKY: Parce que nous sommes passés quelque chose de la fonction. 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 Oui? 896 00:36:19,930 --> 00:36:20,899 >> L'ÉLÈVE: Adresse de x. 897 00:36:20,899 --> 00:36:22,690 BINKY: Ça va avoir l'adresse de x. 898 00:36:22,690 --> 00:36:25,800 Et l'adresse de x est 12, bon. 899 00:36:25,800 --> 00:36:30,990 Donc, x va être 3, parce que nous ne sommes pas vraiment changé x encore. 900 00:36:30,990 --> 00:36:36,700 Et puis un va être 0x12, si l'adresse de x, parce que ce 901 00:36:36,700 --> 00:36:38,840 ce que nous passons à cinq. 902 00:36:38,840 --> 00:36:40,940 >> Et puis ce qui se passe si nous essayons d'y aller? 903 00:36:40,940 --> 00:36:42,145 Qu'allons-nous trouver? 904 00:36:42,145 --> 00:36:47,120 Donc, si vous essayez d'imprimer une étoile, nous allons suivre cette adresse 905 00:36:47,120 --> 00:36:48,620 et obtenir la valeur à l'intérieur. 906 00:36:48,620 --> 00:36:50,470 Et la valeur est juste la même valeur que x 907 00:36:50,470 --> 00:36:53,980 a parce que ce la adresse de x, qui sera 3. 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 Sommes-nous bien? 910 00:36:56,930 --> 00:36:59,990 >> OK, et puis maintenant, nous y allons en fait. 911 00:36:59,990 --> 00:37:05,510 Et tout ce que nous mettons à jour est dans cette adresse 12. 912 00:37:05,510 --> 00:37:07,390 Il est 5. 913 00:37:07,390 --> 00:37:10,560 Alors maintenant, x et une étoile sont 5. 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> Pourquoi donc? 916 00:37:13,680 --> 00:37:17,070 Comme l'adresse de x est 12. 917 00:37:17,070 --> 00:37:20,920 Et a aussi un 12 comme valeur. 918 00:37:20,920 --> 00:37:23,780 Donc, si nous suivons 12, nous sommes aller juste pour trouver x. 919 00:37:23,780 --> 00:37:27,400 Donc, tout ce que nous faisons avec étoiles un qui va se passer 920 00:37:27,400 --> 00:37:30,790 à x, car un contient l'adresse de x. 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 D'accord? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> Et cela est comme le point crucial de la solution. 925 00:37:37,750 --> 00:37:41,500 Alors maintenant, nous sommes en mesure, de cinq, en fait 926 00:37:41,500 --> 00:37:43,840 accès mémoire qui vivait dans principal. 927 00:37:43,840 --> 00:37:47,980 Donc cette mémoire ne vit pas pour cinq, comme avant, cette adresse 12. 928 00:37:47,980 --> 00:37:50,980 Et nous avons pu y aller et changer sa valeur à 5. 929 00:37:50,980 --> 00:37:53,990 >> Et puis quand nous reviendrons, nous oublions un. 930 00:37:53,990 --> 00:37:55,720 Nous oublions étoiles a. 931 00:37:55,720 --> 00:37:57,020 Et x est encore cinq. 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 Donc, si vous voulez mettre en œuvre une fonction de permutation, 934 00:38:00,160 --> 00:38:05,010 vous suffit de faire exactement la même chose, sauf que vous devez int étoiles ici, 935 00:38:05,010 --> 00:38:06,140 et ainsi de suite et ainsi de suite. 936 00:38:06,140 --> 00:38:06,976 D'accord? 937 00:38:06,976 --> 00:38:07,475 Sommes-nous bien? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 Laisser refroidir. 940 00:38:10,610 --> 00:38:12,410 >> Donc, l'arithmétique des pointeurs. 941 00:38:12,410 --> 00:38:13,960 Ceci est un sujet un peu délicat. 942 00:38:13,960 --> 00:38:16,554 Ainsi, il apparaît que pointeurs ne sont que des nombres entiers. 943 00:38:16,554 --> 00:38:17,970 Vous pouvez les considérer comme des entiers. 944 00:38:17,970 --> 00:38:21,080 Parce que dans la mémoire, vous avez comme mémoire adresse zéro, un, deux, trois, 945 00:38:21,080 --> 00:38:21,900 quatre, cinq. 946 00:38:21,900 --> 00:38:23,900 On peut donc résumer les adresses de mémoire. 947 00:38:23,900 --> 00:38:27,230 >> Et qui est généralement ce que vous faites quand vous êtes en réseau et, par exemple. 948 00:38:27,230 --> 00:38:30,540 Un tableau est comme un contiguë bloc de mémoire, de beaucoup de caractères, 949 00:38:30,540 --> 00:38:31,840 par exemple, beaucoup de ints. 950 00:38:31,840 --> 00:38:34,420 Donc, si vous voulez aller à la deuxième int ou à la troisième int, 951 00:38:34,420 --> 00:38:37,830 il vous suffit de résumer quelque chose pour la première adresse, et vous allez y arriver. 952 00:38:37,830 --> 00:38:39,620 Donc, cela est vraiment utile pour cela. 953 00:38:39,620 --> 00:38:41,850 >> Et la chose à garder dans l'esprit, cependant, est 954 00:38:41,850 --> 00:38:45,140 qu'il est pas comme juste arithmétique normale dans le sens 955 00:38:45,140 --> 00:38:50,304 que si vous faites affaire avec, par exemple, un int étoiles, et vous ajoutez 1 à il, 956 00:38:50,304 --> 00:38:52,220 alors tu ne vas pas à ajouter 1 à l'adresse, 957 00:38:52,220 --> 00:38:53,950 vous allez ajouter 4 à l'adresse. 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 Parce que un int est de 4 octets. 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> Donc, cela est tout comme marcher sur un tableau. 962 00:38:59,540 --> 00:39:05,260 Si nous avons un tableau de lots d'entiers et alors nous essayons d'aller à la seconde, 963 00:39:05,260 --> 00:39:08,790 il est fondamentalement juste additionnant les l'adresse de la première de plus 1. 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 Mais ce ne sera pas juste être-- disons que l'adresse de la première est 4. 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 Ici, dans ce cas. 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 Et si nous résumons, si ce est ce qui se passe. 970 00:39:22,850 --> 00:39:23,530 Nous avons un int. 971 00:39:23,530 --> 00:39:25,640 Int x est égal à 5. 972 00:39:25,640 --> 00:39:26,950 X a une valeur de 5. 973 00:39:26,950 --> 00:39:31,240 Et on initialise ce pointeur, int y int étoiles y est égal à l'adresse de x. 974 00:39:31,240 --> 00:39:33,660 >> Supposons que l'adresse de x est 4. 975 00:39:33,660 --> 00:39:36,960 Qu'est-ce qui va se passer Maintenant, si je résume ajouter 1 à Y? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 Il va en fait somme de 4 au lieu de seulement 1. 978 00:39:44,790 --> 00:39:50,920 Donc je ajouter un 1, mais il en fait ajoutée 4, parce que l'ordinateur est intelligent. 979 00:39:50,920 --> 00:39:55,275 Donc, il va en fait ajouter par i fois la taille du type de pointeur. 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 D'accord? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> Donc, si elle était un char, par exemple, si cela était un omble étoiles y, 984 00:40:02,440 --> 00:40:07,141 et si nous avons ajouté 1 alors ce serait être 5, parce que l'omble est longueur de 1 octet. 985 00:40:07,141 --> 00:40:07,640 Bonne? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> Et finalement, nous sommes arrivés à pointeurs et les tableaux. 988 00:40:13,190 --> 00:40:16,451 Il se trouve que chaque fois vous avez affaire à un tableau, 989 00:40:16,451 --> 00:40:18,075 vous êtes en train de traiter avec un pointeur. 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 La très belle raison conceptuelle pour cela est que les tableaux sont très grandes. 992 00:40:24,777 --> 00:40:27,360 Donc me souviens que je disais que chaque fois que vous passez choses autour, 993 00:40:27,360 --> 00:40:29,097 vous copiez tout. 994 00:40:29,097 --> 00:40:31,180 Donc, si vous avez un tableau qui est vraiment, vraiment grand, 995 00:40:31,180 --> 00:40:32,990 vous ne voulez pas vraiment copier tout à chaque fois 996 00:40:32,990 --> 00:40:35,710 vous passez à un autre autour de fonction, parce que ce juste 997 00:40:35,710 --> 00:40:37,190 des quantités massives de travail. 998 00:40:37,190 --> 00:40:39,710 Donc, ce que vous faites est juste passé l'adresse du premier octet. 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 Et puis la fonction aura accès à tous les éléments de cette matrice. 1001 00:40:44,010 --> 00:40:48,670 Donc vous avez passé le tableau par son adresse, si l'adresse du premier octet. 1002 00:40:48,670 --> 00:40:53,010 >> Donc, si nous déclarons int tableau 3, ici, nous savons 1003 00:40:53,010 --> 00:40:57,470 la façon d'accéder au premier élément en utilisant la notation de support. 1004 00:40:57,470 --> 00:41:02,410 Si vous vous souvenez du support notation, tableau support 0 est égal à 1. 1005 00:41:02,410 --> 00:41:06,330 Eh bien, ce serait exactement la même comme juste y aller et mettre 1. 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 OK, est exactement la même chose. 1008 00:41:09,110 --> 00:41:13,010 Ainsi, la notation de support ici sera le même que celui de cette ligne. 1009 00:41:13,010 --> 00:41:18,600 >> Et devinez quoi la notation de support pour un tableau support 1 sera? 1010 00:41:18,600 --> 00:41:20,440 Ce sera juste la même chose que cela. 1011 00:41:20,440 --> 00:41:22,500 Donc, ajouter un à la matrice. 1012 00:41:22,500 --> 00:41:24,370 Déplacer un long mémoire. 1013 00:41:24,370 --> 00:41:26,310 Allez-y, et mettre un 2. 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 D'accord? 1016 00:41:28,579 --> 00:41:29,870 Et cette ligne est la même chose. 1017 00:41:29,870 --> 00:41:34,860 Nous voulons aller à la troisième boîte, de sorte gamme plus 2. 1018 00:41:34,860 --> 00:41:37,465 Allez-y, et de mettre un 3. 1019 00:41:37,465 --> 00:41:39,340 Donc, dans la mémoire, ce qui est qui va se passer est que nous sommes 1020 00:41:39,340 --> 00:41:44,400 va avoir 1, 2, et 3 comme le trois éléments de ce tableau. 1021 00:41:44,400 --> 00:41:46,970 >> Nous aurions pu faire cela en utilisant notre notation de support familier. 1022 00:41:46,970 --> 00:41:49,410 Je veux juste vous les gars de savoir qu'ils sont la même chose. 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 OK, les questions à ce sujet? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 Nice. 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 Maintenant, je vais remettre la parole à Hannah, 1029 00:41:59,880 --> 00:42:00,330 >> HANNAH: Yay, yee-haw. 1030 00:42:00,330 --> 00:42:02,246 >> BINKY: Parler mémoire et de l'article choses. 1031 00:42:02,246 --> 00:42:06,554 [Applaudissements] 1032 00:42:06,554 --> 00:42:10,150 >> HANNAH: Salut, cool, alors nous sommes va parler un peu plus 1033 00:42:10,150 --> 00:42:13,090 sur la mémoire, que nous venons abordé l'utilisation de pointeurs. 1034 00:42:13,090 --> 00:42:16,060 Donc, il ya deux parties principales de mémoire qui nous intéresse. 1035 00:42:16,060 --> 00:42:18,830 Nous avons la pile, qui pousse dans le fond, et le tas, qui 1036 00:42:18,830 --> 00:42:20,600 descend du haut. 1037 00:42:20,600 --> 00:42:24,690 Et la pile va tenir l'ensemble de nos variables d'instance. 1038 00:42:24,690 --> 00:42:28,860 Ainsi, chaque appelle à une fonction obtient son propre petit cadre sur la pile. 1039 00:42:28,860 --> 00:42:32,160 Alors que Gabe mentionné plus tôt, si nous appeler encore et encore la fonction, 1040 00:42:32,160 --> 00:42:34,180 nous allons empiler les choses sur la pile. 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> Et de même, le tas, qui commence au sommet 1043 00:42:38,570 --> 00:42:42,660 va tenir toute la mémoire que nous allouer dynamiquement. 1044 00:42:42,660 --> 00:42:45,110 Et comme nous dynamiquement allouer de la mémoire, 1045 00:42:45,110 --> 00:42:47,580 cette descendra vers le bas. 1046 00:42:47,580 --> 00:42:51,340 Couple choses à savoir quand nous utilisons la pile et le tas, 1047 00:42:51,340 --> 00:42:55,200 avec la pile, si nous avons trop many-- nous allons say-- appels récursifs, 1048 00:42:55,200 --> 00:42:58,392 et nous appelons à nouveau une fonction, et encore, et encore, et encore, 1049 00:42:58,392 --> 00:43:00,350 et il est empiler, empilage, l'empilage vers le haut. 1050 00:43:00,350 --> 00:43:01,570 Et il va s'écraser dans le tas. 1051 00:43:01,570 --> 00:43:03,040 Nous allons manquer de mémoire. 1052 00:43:03,040 --> 00:43:05,100 Cela va provoquer une problème de l'ordinateur. 1053 00:43:05,100 --> 00:43:06,770 Et qui est ce qu'on appelle le débordement de pile. 1054 00:43:06,770 --> 00:43:09,728 Voilà donc certainement quelque chose que vous devraient être conscients et essayer d'éviter. 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 Et le tas, à se souvenir pas de fuite accidentelle mémoire. 1057 00:43:14,050 --> 00:43:17,950 Chaque fois que vous utilisez malloc, ne pas oublier de libérer la mémoire. 1058 00:43:17,950 --> 00:43:20,040 Sinon, ce sera juste être sur le tas perdu, 1059 00:43:20,040 --> 00:43:23,230 et l'ordinateur ne saura pas que il est libre d'utiliser cette mémoire. 1060 00:43:23,230 --> 00:43:25,810 Donc, ce sont quelques choses être très prudent avec quand 1061 00:43:25,810 --> 00:43:28,580 vous avez affaire à la pile et la pile. 1062 00:43:28,580 --> 00:43:30,412 Vous avez des questions à cet égard? 1063 00:43:30,412 --> 00:43:31,304 Impressionnant. 1064 00:43:31,304 --> 00:43:31,900 >> OK, cool. 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 Donc ce genre de a la même idée débordement de pile, où 1067 00:43:36,810 --> 00:43:39,850 nous allons au-delà de la limites de ce mémoire 1068 00:43:39,850 --> 00:43:41,960 est que nous sommes censés être en mesure d'utiliser. 1069 00:43:41,960 --> 00:43:45,077 Alors, prenez, par exemple, un tampon, ou vous pourrait juste penser à elle comme un tableau. 1070 00:43:45,077 --> 00:43:47,660 Et nous l'avons dit, OK, nous allons créer ce joli petit tableau. 1071 00:43:47,660 --> 00:43:49,140 Ça va être une chaîne. 1072 00:43:49,140 --> 00:43:50,630 Ou il va stocker les caractères. 1073 00:43:50,630 --> 00:43:51,720 Et il va juste dire bonjour. 1074 00:43:51,720 --> 00:43:52,678 Et il est indéterminée. 1075 00:43:52,678 --> 00:43:53,990 Ce est tout. 1076 00:43:53,990 --> 00:43:58,240 >> Mais si je devais quelqu'un mal et je voulais faire quelque chose de mal avec ce tableau, ce 1077 00:43:58,240 --> 00:44:02,310 Je pourrais faire est d'essayer d'écrire après la fin de la chaîne. 1078 00:44:02,310 --> 00:44:04,490 Et comme vous le verrez, si Je vous écris assez loin, 1079 00:44:04,490 --> 00:44:06,980 Je peux effectivement affecter l'adresse de retour. 1080 00:44:06,980 --> 00:44:09,530 Et si je commence à affecter l'adresse de retour, 1081 00:44:09,530 --> 00:44:11,730 Je affecter la façon dont le programme fonctionne réellement. 1082 00:44:11,730 --> 00:44:15,900 Et au lieu de rentrer, vous savoir, une chaîne heureux comme bonjour, je 1083 00:44:15,900 --> 00:44:19,460 pourrait faire quelque chose de mauvais, comme aller à ailleurs dans votre ordinateur, encore 1084 00:44:19,460 --> 00:44:22,146 mémoire, modifier, tout ce que je veux faire. 1085 00:44:22,146 --> 00:44:25,020 Voilà ce que ce serait ressembler est si je sorte de l'a rempli 1086 00:44:25,020 --> 00:44:27,400 avec la valeur des ordures aléatoire, dans ce cas, juste une. 1087 00:44:27,400 --> 00:44:30,490 Et puis, quand je fait obtenu à l'adresse de mémoire, 1088 00:44:30,490 --> 00:44:33,740 Je commencé à se remplir avec quelque chose qui fait ce que je voulais faire. 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 Toute question débordement de tampon? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 Impressionnant, volant à droite à travers ce genre de choses. 1093 00:44:40,730 --> 00:44:43,530 >> OK, donc nous avons beaucoup parlé de à propos des pointeurs avec Gabe. 1094 00:44:43,530 --> 00:44:45,790 Comment pouvons-nous réellement un pointeur? 1095 00:44:45,790 --> 00:44:48,070 Comment pouvons-nous obtenir une adresse en mémoire? 1096 00:44:48,070 --> 00:44:51,040 Eh bien, nous pouvons utiliser cette belle appel de fonction malloc, qui 1097 00:44:51,040 --> 00:44:53,370 va obtenir un petit morceau de mémoire, 1098 00:44:53,370 --> 00:44:55,480 en particulier dans le tas, comme nous en avons discuté, 1099 00:44:55,480 --> 00:44:59,780 et il va vous redonner une pointeur vers cette adresse en mémoire. 1100 00:44:59,780 --> 00:45:01,950 Et l'argument selon lequel nous avoir à donner à malloc 1101 00:45:01,950 --> 00:45:04,280 est la quantité d'espace dans la mémoire que nous voulons. 1102 00:45:04,280 --> 00:45:06,100 >> Ainsi, vous pouvez voir la taille en octets. 1103 00:45:06,100 --> 00:45:08,670 Disons, par exemple, ou en fait, dans cet exemple, 1104 00:45:08,670 --> 00:45:12,040 nous allouer suffisamment espace pour 10 entiers. 1105 00:45:12,040 --> 00:45:15,640 Donc probablement ce que nous allons vouloir de mettre ici est un tableau de 10 entiers. 1106 00:45:15,640 --> 00:45:19,641 Donc, nous lui donnons la taille d'entiers, qui avons appris combien d'octets? 1107 00:45:19,641 --> 00:45:20,140 L'ÉLÈVE: 4. 1108 00:45:20,140 --> 00:45:22,920 HANNAH: 4, belle, et nous 10 vouloir de ceux qui sont en ligne, 1109 00:45:22,920 --> 00:45:28,050 de sorte que nous avons assez d'espace pour stocker tous les 10 entiers, dans ce cas. 1110 00:45:28,050 --> 00:45:31,290 Quelque chose super important, chaque fois que vous appelez malloc, 1111 00:45:31,290 --> 00:45:32,880 vous devez vérifier nulle. 1112 00:45:32,880 --> 00:45:37,310 Si vous ne cochez pas nul, bien, malloc cas d'épuisement de l'espace 1113 00:45:37,310 --> 00:45:40,400 et ne peut plus vous donner tout plus de mémoire, il sera de retour nul. 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 Donc, si vous ne cochez pas, malloc peut retourner null. 1116 00:45:45,630 --> 00:45:51,265 Et puis si nous essayons de déréférencer un pointeur NULL, 1117 00:45:51,265 --> 00:45:54,960 nous allons obtenir une erreur de segmentation, que nous allons parler maintenant. 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 Impressionnant. 1120 00:45:56,650 --> 00:45:58,300 >> OK, les questions avec malloc? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 Oui? 1123 00:46:00,544 --> 00:46:05,460 >> L'ÉLÈVE: Est-ce que la vérification null [Inaudible] ne pas le faire sur le quiz? 1124 00:46:05,460 --> 00:46:08,100 >> HANNAH: Bien sûr, la question était il ne matter-- sur le questionnaire, 1125 00:46:08,100 --> 00:46:10,420 vous obtiendrez des points de si vous ne cochez pas nul? 1126 00:46:10,420 --> 00:46:12,794 Oui, vous obtiendrez des points de Si vous ne cochez pas la valeur NULL. 1127 00:46:12,794 --> 00:46:16,030 Chaque fois que vous appelez malloc, à la fois sur le questionnaire et vos psets et dans la vraie vie, 1128 00:46:16,030 --> 00:46:17,155 vous devez vérifier nulle. 1129 00:46:17,155 --> 00:46:18,330 Bonne question. 1130 00:46:18,330 --> 00:46:19,689 >> GABE: Que faire si je ne libère pas? 1131 00:46:19,689 --> 00:46:21,730 HANNAH: Gabe veut savoir si nous ne le faisons pas libre. 1132 00:46:21,730 --> 00:46:25,030 Ensuite, nous aurons une fuite de mémoire dans notre tas. 1133 00:46:25,030 --> 00:46:26,140 D'autres questions? 1134 00:46:26,140 --> 00:46:27,550 Oui? 1135 00:46:27,550 --> 00:46:30,120 >> L'ÉLÈVE: Peut vous-- aller sur les débordements de buffer rapide à nouveau? 1136 00:46:30,120 --> 00:46:30,530 >> HANNAH: Bien sûr. 1137 00:46:30,530 --> 00:46:33,071 La question était peut-on aller sur débordement vraiment rapide tampon. 1138 00:46:33,071 --> 00:46:35,050 Revenons à ces diapositives. 1139 00:46:35,050 --> 00:46:37,430 Ainsi, un tampon, vous pouvez simplement penser comme un tableau, non? 1140 00:46:37,430 --> 00:46:39,360 Vous avez un peu d'espace dans la mémoire. 1141 00:46:39,360 --> 00:46:43,580 Et lorsque nous créons notre premier tableau, nous savons réseaux fixes taille, 1142 00:46:43,580 --> 00:46:45,470 ou notre tampon a une taille fixe. 1143 00:46:45,470 --> 00:46:51,360 >> Donc, disons que dans ce cas, nous avons juste assez d'espace pour écrire la chaîne bonjour. 1144 00:46:51,360 --> 00:46:57,340 Si nous dépassons cette limite, si nous dépassons ce que notre gamme nous a dit qu'il pourrait tenir, 1145 00:46:57,340 --> 00:46:59,780 nous pourrions commencer écriture dans la mémoire 1146 00:46:59,780 --> 00:47:01,780 que l'ordinateur ne fonctionne pas vouloir nous écrire en. 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 Et précisément, si nous avons atteint quelque chose comme le retour 1149 00:47:05,580 --> 00:47:08,700 adresse de la fonction, qui, comme toute autre pièce de la mémoire, 1150 00:47:08,700 --> 00:47:11,420 est juste quelque part dans votre ordinateur, vous pouvez réellement 1151 00:47:11,420 --> 00:47:14,080 changer cela et commencer à faire de mauvaises choses. 1152 00:47:14,080 --> 00:47:15,272 Répondre à votre question? 1153 00:47:15,272 --> 00:47:16,230 Impressionnant, autre chose? 1154 00:47:16,230 --> 00:47:17,466 Oui? 1155 00:47:17,466 --> 00:47:21,948 >> Etudiant: Ainsi empiler [inaudible], vous dit d'aller de bas en remontant. 1156 00:47:21,948 --> 00:47:25,434 Dans la gamme de la pile, ne la mémoire vont de, comme, 1157 00:47:25,434 --> 00:47:27,230 de haut en bas se rapportant à chaque pause? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> HANNAH: Comment faire vous-- reporter à Rob sur celui-ci. 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> ROB: Il va grandir dans le même direction que la pile grandit. 1162 00:47:38,213 --> 00:47:38,712 HANNAH: OK. 1163 00:47:38,712 --> 00:47:40,967 ROB: Je vous trompez. 1164 00:47:40,967 --> 00:47:42,331 Cela va être de l'abstraction. 1165 00:47:42,331 --> 00:47:42,831 HANNAH: OK. 1166 00:47:42,831 --> 00:47:44,000 ROB: Cela est vrai. 1167 00:47:44,000 --> 00:47:49,420 Ainsi, si la pile est de plus en plus le haut, puis il generally-- 1168 00:47:49,420 --> 00:47:52,380 n'a pas à être comme ça. mais vous pouvez déclarer int x. 1169 00:47:52,380 --> 00:47:54,120 Ensuite, vous déclarez int y. 1170 00:47:54,120 --> 00:47:57,300 Puis int x sera généralement inférieur sur la pile de int y. 1171 00:47:57,300 --> 00:47:59,300 Mais qui est juste un fait. 1172 00:47:59,300 --> 00:48:02,410 Cela ne veut pas comme une chose importante de semences. 1173 00:48:02,410 --> 00:48:06,800 >> ROB: Donc la question était de nouveau ce qui se passe chaque image se forme. 1174 00:48:06,800 --> 00:48:08,960 Ainsi, chaque fonction obtient un petit morceau de la pile. 1175 00:48:08,960 --> 00:48:13,030 Et pendant que vous montez, dans ce petit morceau, dans ce cadre, 1176 00:48:13,030 --> 00:48:16,710 nous dirons que les variables dans ce cadre déplacer également en hausse. 1177 00:48:16,710 --> 00:48:17,473 Question? 1178 00:48:17,473 --> 00:48:18,688 >> ROB: Juste pour être sur micro. 1179 00:48:18,688 --> 00:48:19,396 HANNAH: Oh, oui. 1180 00:48:19,396 --> 00:48:20,440 ROB: Je vais parler en vous. 1181 00:48:20,440 --> 00:48:21,410 HANNAH: Oh, oui, OK. 1182 00:48:21,410 --> 00:48:24,150 ROB: L'exception est pour les tableaux et les Structures, 1183 00:48:24,150 --> 00:48:27,470 où les tableaux, une plus faible index dans le tableau, 1184 00:48:27,470 --> 00:48:29,930 et dans structs supérieur à domaine dans les struct 1185 00:48:29,930 --> 00:48:35,040 sont garantis d'être à des adresses plus bas à une valeur plus tard dans la baie. 1186 00:48:35,040 --> 00:48:36,720 Donc, ceux-ci sont garantis. 1187 00:48:36,720 --> 00:48:40,310 Mais toutes les variables particulières à l'intérieur, comme int x et y int dans une fonction, 1188 00:48:40,310 --> 00:48:43,030 il n'y a pas nécessairement de relation entre leurs adresses. 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 HANNAH: Une autre question ici? 1191 00:48:46,340 --> 00:48:51,620 Etudiant: Ainsi dans un tampon de flux, seulement Buffer Overflow 1192 00:48:51,620 --> 00:48:54,980 arrivé seulement quand vous ont, comme, attribué 1193 00:48:54,980 --> 00:49:01,056 une quantité d'une matrice que puis est plus grande? 1194 00:49:01,056 --> 00:49:03,230 Comme, pouvez-vous? 1195 00:49:03,230 --> 00:49:05,435 Donc, si vous vous demandez quelque chose de la user-- 1196 00:49:05,435 --> 00:49:06,018 >> HANNAH: Mm-hm. 1197 00:49:06,018 --> 00:49:08,600 L'ÉLÈVE: Peuvent-ils de force vous donner quelque chose en retour 1198 00:49:08,600 --> 00:49:11,777 qui est plus grand que tout ce que vous avez alloué pour eux? 1199 00:49:11,777 --> 00:49:13,610 HANNAH: Bien sûr, si la question était essentiellement, 1200 00:49:13,610 --> 00:49:16,217 l'utilisateur peut vous donner plus que vous demandez? 1201 00:49:16,217 --> 00:49:16,800 L'ÉLÈVE: Oui. 1202 00:49:16,800 --> 00:49:18,480 HANNAH: Eh bien, vous pourriez éviter l'utilisateur de le faire. 1203 00:49:18,480 --> 00:49:21,350 Vous pourriez dire précisément ne pas me donner plus de x nombre de bytes 1204 00:49:21,350 --> 00:49:24,330 Je ne vous ai donné la chambre pour x nombre d'octets, le nombre de caractères x. 1205 00:49:24,330 --> 00:49:25,700 Voilà donc quelque chose que vous voulez éviter. 1206 00:49:25,700 --> 00:49:26,199 Oui? 1207 00:49:26,199 --> 00:49:30,270 Quelle est la différence entre Stack Overflow et un débordement de tampon? 1208 00:49:30,270 --> 00:49:32,140 >> HANNAH: OK, donc la pile overflow-- oh, ce 1209 00:49:32,140 --> 00:49:34,790 est la différence entre la pile débordement et de débordement de tampon? 1210 00:49:34,790 --> 00:49:37,581 Donc, nous voulons penser à débordement pile passe quand nous sommes réellement 1211 00:49:37,581 --> 00:49:39,530 l'empilage de ces appels de fonction. 1212 00:49:39,530 --> 00:49:42,991 Disons que vous avez une fonction récursive, parce que nous savons que chaque fois que vous 1213 00:49:42,991 --> 00:49:45,240 appeler une fonction, il est obtient sa propre trame sur la pile. 1214 00:49:45,240 --> 00:49:47,950 >> Donc, nous nous classons trop élevé, et puis nous commençons à déborder. 1215 00:49:47,950 --> 00:49:50,530 Et nous utilisons trop de mémoire, et nous ne sommes nulle part à gauche. 1216 00:49:50,530 --> 00:49:51,590 Nous obtenons cette erreur. 1217 00:49:51,590 --> 00:49:53,930 >> Débordement de tampon est dans un programme. 1218 00:49:53,930 --> 00:49:57,180 Nous voulons peut-être pas nécessairement à court de mémoire de la même façon 1219 00:49:57,180 --> 00:50:00,080 que nous pourrions si nous empilage un si grand nombre d'appels de fonction, 1220 00:50:00,080 --> 00:50:04,540 mais nous écrivons passé la mémoire que nous savons que nous pouvons utiliser. 1221 00:50:04,540 --> 00:50:06,170 Et qui nous permet de faire de mauvaises choses. 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 Ouais? 1224 00:50:08,560 --> 00:50:10,950 >> ROB: Oui, vous voudrez peut-être à répéter ce, 1225 00:50:10,950 --> 00:50:12,699 mais vous pouvez aussi penser d'un débordement de pile 1226 00:50:12,699 --> 00:50:15,374 que comme un type spécifique de dépassement de mémoire tampon. 1227 00:50:15,374 --> 00:50:17,665 Ou vous pensez juste de votre empiler comme un très gros tampon. 1228 00:50:17,665 --> 00:50:20,724 Puis, quand vous débordez vous empilez, il est un peu comme un dépassement de mémoire tampon. 1229 00:50:20,724 --> 00:50:23,390 Mais un débordement de pile est juste un terme spécifique utilisé lors de la pile 1230 00:50:23,390 --> 00:50:24,310 elle-même déborde. 1231 00:50:24,310 --> 00:50:27,500 >> HANNAH: Bon, alors à répéter pour la vidéo, 1232 00:50:27,500 --> 00:50:31,756 il que vous pouvez penser de débordement de pile comme un type spécifique de débordement de tampon. 1233 00:50:31,756 --> 00:50:33,040 Cool? 1234 00:50:33,040 --> 00:50:34,562 D'autres questions avant de passer? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 Impressionnant. 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> OK, cool, donc parlons certains messages d'erreur courants. 1239 00:50:39,727 --> 00:50:42,060 Ceci est quelque chose qui a montré sur plusieurs questionnaires, 1240 00:50:42,060 --> 00:50:44,740 donc quelque chose qui vaut la peine prendre un deuxième coup d'oeil. 1241 00:50:44,740 --> 00:50:46,860 Je suis sûr que vous avez rencontré au moins une partie de ceux-ci 1242 00:50:46,860 --> 00:50:48,690 comme vous faites votre problème fixe. 1243 00:50:48,690 --> 00:50:50,980 Donc, assurez-vous que vous pouvez parler à leur sujet sur le questionnaire. 1244 00:50:50,980 --> 00:50:52,990 >> Ainsi, la première est une une erreur de segmentation. 1245 00:50:52,990 --> 00:50:55,250 Et ça peut nous de temps tenter d'accéder à la mémoire 1246 00:50:55,250 --> 00:50:57,130 que nous ne sommes pas autorisés à accéder. 1247 00:50:57,130 --> 00:51:00,280 Donc, vous avez vu ce MIGH, par exemple, dans cassure. 1248 00:51:00,280 --> 00:51:03,390 Si la détection de collision null, et puis vous 1249 00:51:03,390 --> 00:51:05,500 essayé de faire quelque chose avec cette valeur de zéro, 1250 00:51:05,500 --> 00:51:08,147 l'ordinateur donnerait vous une erreur de segmentation. 1251 00:51:08,147 --> 00:51:10,730 Donc, un, une chose importante à faire pour essayer d'éviter ce 1252 00:51:10,730 --> 00:51:12,000 est de toujours vérifier pour nulle. 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> Vous avez peut-être également vu déclaration implicite de la fonction. 1255 00:51:16,180 --> 00:51:18,370 Donc voilà ce qui arrive quand Allison vous a montré 1256 00:51:18,370 --> 00:51:20,150 comment nous faisons un prototype, non? 1257 00:51:20,150 --> 00:51:23,440 Alors disons que nous avons une certaine fonction que nous définissons. 1258 00:51:23,440 --> 00:51:24,440 Disons cube. 1259 00:51:24,440 --> 00:51:27,120 Et cela va au fond de notre fonction, en vertu principale. 1260 00:51:27,120 --> 00:51:35,205 >> Si on oublie de dire à l'ordinateur sur cube, lorsque principal tente d'appeler cube, 1261 00:51:35,205 --> 00:51:36,830 l'ordinateur sera, comme, oh mon dieu. 1262 00:51:36,830 --> 00:51:38,300 Je ne sais pas ce que cela signifie. 1263 00:51:38,300 --> 00:51:39,760 Je ne sais pas quoi faire, ici. 1264 00:51:39,760 --> 00:51:41,594 Ainsi, le prototype dit ne vous inquiétez pas. 1265 00:51:41,594 --> 00:51:42,510 Je vais vous le dire. 1266 00:51:42,510 --> 00:51:43,132 >> Il va venir. 1267 00:51:43,132 --> 00:51:43,840 Ne me crie pas dessus. 1268 00:51:43,840 --> 00:51:46,697 Ne me donnez pas un implicite déclaration de la fonction. 1269 00:51:46,697 --> 00:51:49,280 Donc, si vous obtenez cette erreur, une chose que vous allez vouloir faire 1270 00:51:49,280 --> 00:51:50,821 est assurez-vous que vous avez votre prototype. 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 D'accord? 1273 00:51:53,230 --> 00:51:55,680 >> Et last but not least, identificateur non déclaré 1274 00:51:55,680 --> 00:52:00,570 est essentiellement lorsque vous essayez d'utiliser un variable que vous avez pas déclaré. 1275 00:52:00,570 --> 00:52:03,449 Donc, tout d'un coup vous commencez dire comme n plus plus. 1276 00:52:03,449 --> 00:52:04,740 Et l'ordinateur dit ce qui est n? 1277 00:52:04,740 --> 00:52:06,660 Vous ne m'a jamais dit n était une chose. 1278 00:52:06,660 --> 00:52:10,930 >> Donc, une chose que vous devez vous assurer que vous fait est de dire à l'ordinateur ce n est. 1279 00:52:10,930 --> 00:52:13,320 Ainsi, par exemple, n peut être un nombre entier. 1280 00:52:13,320 --> 00:52:14,999 Et puis vous éviter cette erreur. 1281 00:52:14,999 --> 00:52:16,290 Des questions sur les erreurs courantes? 1282 00:52:16,290 --> 00:52:17,260 Oui? 1283 00:52:17,260 --> 00:52:19,344 >> ÉTUDIANT: Pour l'implicite déclaration de fonction, 1284 00:52:19,344 --> 00:52:22,343 pourrait-il être aussi que vous avez omis une des bibliothèques que vous deviez 1285 00:52:22,343 --> 00:52:24,400 à inclure, plutôt que le prototype? 1286 00:52:24,400 --> 00:52:26,359 >> HANNAH: Bon, alors le question était, pourriez-vous 1287 00:52:26,359 --> 00:52:28,650 aussi obtenir cette erreur si vous oublié d'inclure une bibliothèque. 1288 00:52:28,650 --> 00:52:29,085 >> L'ÉLÈVE: Oui. 1289 00:52:29,085 --> 00:52:30,876 >> HANNAH: Absolument, en raison de la même manière 1290 00:52:30,876 --> 00:52:33,540 que nous voulons mettre nos prototypes avant que la fonction principale, 1291 00:52:33,540 --> 00:52:37,717 si nous avons une bibliothèque, ceux vont à inclure essentiellement les prototypes, 1292 00:52:37,717 --> 00:52:39,425 inclure les définitions des fonctions. 1293 00:52:39,425 --> 00:52:40,585 Grande question. 1294 00:52:40,585 --> 00:52:43,230 >> ÉTUDIANT: Pour une segmentation la faute, ce que cela aussi 1295 00:52:43,230 --> 00:52:47,350 passerait-il si nous, comme, essayé à accéder à une variable, 1296 00:52:47,350 --> 00:52:51,947 comme, dans un autre [inaudible] qu'il a été déclaré dans? 1297 00:52:51,947 --> 00:52:54,030 HANNAH: Bien sûr, il en serait de nous obtenir une erreur de segmentation 1298 00:52:54,030 --> 00:52:56,270 si nous avons essayé d'accéder à un variables hors de portée? 1299 00:52:56,270 --> 00:52:57,104 Etait-ce une question? 1300 00:52:57,104 --> 00:52:57,645 L'ÉLÈVE: Oui. 1301 00:52:57,645 --> 00:52:58,430 HANNAH: Belle. 1302 00:52:58,430 --> 00:53:01,840 Donc probablement, vous allez obtenir une noir erreur d'identification à la place. 1303 00:53:01,840 --> 00:53:04,006 Donc, il va juste dire Je ne sais pas ce qui est. 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 Cool, autre chose? 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 Ouais, OK, belle. 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> Tous droitier, si la récursivité. 1310 00:53:12,400 --> 00:53:15,160 Donc je l'ai mentionné à quelques reprises que nous pourrions obtenir un débordement de pile 1311 00:53:15,160 --> 00:53:17,919 parce que nous appelons notre fonction récursive tant de fois. 1312 00:53:17,919 --> 00:53:20,210 Nous recevons tous ces pile cadres, blah, blah, blah. 1313 00:53:20,210 --> 00:53:22,420 Ce qui est encore une fonction récursive? 1314 00:53:22,420 --> 00:53:25,680 Eh bien, une fonction récursive est toute fonction que lui-même appelle. 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> Quelques choses à savoir quand vous mettent en œuvre des fonctions récursives, 1317 00:53:30,160 --> 00:53:31,940 ne pas oublier d'inclure un scénario de base. 1318 00:53:31,940 --> 00:53:34,010 Un scénario de base est la point où nous nous retrouvons. 1319 00:53:34,010 --> 00:53:38,740 Ainsi, par exemple, si nous codage, , Dire, Fibonacci récursive, 1320 00:53:38,740 --> 00:53:43,210 nous voulons nous assurer que lorsque nous obtenons pour la ou le premier numéro 0 de Fibonacci, 1321 00:53:43,210 --> 00:53:46,220 ces deux nombres ont ces cas, parce que ce ne sont pas dépendants 1322 00:53:46,220 --> 00:53:47,700 sur des choses qui sont venus avant. 1323 00:53:47,700 --> 00:53:48,990 Ceux-ci ont leurs propres valeurs. 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> Certains pros à la récursivité, ce qui est un question que nous avons vu sur des questionnaires passés. 1326 00:53:55,320 --> 00:53:57,930 Ils peuvent conduire à plus concise, le code élégant. 1327 00:53:57,930 --> 00:54:00,510 Et un grand nombre de fonctions, un beaucoup de différents algorithmes, 1328 00:54:00,510 --> 00:54:02,350 en fait se prêter à la récursivité. 1329 00:54:02,350 --> 00:54:05,510 Leur définition est peut-être récursives et de lui-même. 1330 00:54:05,510 --> 00:54:06,980 Donc Fibonacci est un. 1331 00:54:06,980 --> 00:54:07,860 Factorielle est une. 1332 00:54:07,860 --> 00:54:10,480 Fusionner tri est One-- tous choses que vous pouvez regarder. 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 OK, des questions? 1335 00:54:13,460 --> 00:54:13,960 Oui? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> L'ÉLÈVE: Est un cas de coin similaire à un cas de base? 1338 00:54:19,612 --> 00:54:22,590 Ou est-ce pour une autre genre de [inaudible]? 1339 00:54:22,590 --> 00:54:25,170 >> HANNAH: Bien sûr, si une coin affaire est donc any-- 1340 00:54:25,170 --> 00:54:27,580 est le même coin cas comme cas de base? 1341 00:54:27,580 --> 00:54:32,825 Un cas de coin est tout ce que votre code pourrait comporter un peu différemment. 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 cas de base est en quelque sorte lié, dans qu'ils sont comme des cas particuliers 1344 00:54:38,610 --> 00:54:40,240 que vous voulez regarder. 1345 00:54:40,240 --> 00:54:43,240 Mais l'idée d'un scénario de base est que vous voulez que votre fonction récursive 1346 00:54:43,240 --> 00:54:44,870 à arrêter à un moment donné. 1347 00:54:44,870 --> 00:54:46,490 Il ne peut pas garder elle-même appel à jamais. 1348 00:54:46,490 --> 00:54:47,781 Il faut arrêter à un moment donné. 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> ROB: Oui, souvent, vos affaires de base pourraient être des exemples de bases de coin. 1351 00:54:53,460 --> 00:54:55,876 >> HANNAH: droit, cool, rien? 1352 00:54:55,876 --> 00:54:58,732 >> L'ÉLÈVE: Pourriez-vous expliquer fonde un peu plus? 1353 00:54:58,732 --> 00:55:01,600 Je ne comprends pas très bien [Inaudible] cas de base. 1354 00:55:01,600 --> 00:55:02,676 >> HANNAH: Des cas de base? 1355 00:55:02,676 --> 00:55:03,140 >> L'ÉLÈVE: cas de base, oui. 1356 00:55:03,140 --> 00:55:03,770 >> HANNAH: Oh oui, bien sûr. 1357 00:55:03,770 --> 00:55:04,270 Voyons. 1358 00:55:04,270 --> 00:55:05,480 Avons-nous la craie ici? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 Oui, nous le faisons. 1361 00:55:07,320 --> 00:55:09,530 OK, donc très rapidement, je vais essayer d'écrire assez gros 1362 00:55:09,530 --> 00:55:11,320 de sorte que vous pouvez voir sur l'écran. 1363 00:55:11,320 --> 00:55:13,490 Parlons, vraiment rapidement, Fibonacci. 1364 00:55:13,490 --> 00:55:15,550 Donc, je vais vous donner la suite de Fibonacci. 1365 00:55:15,550 --> 00:55:17,090 Vous pouvez rechercher la définition. 1366 00:55:17,090 --> 00:55:26,050 >> Essentiellement, chaque élément de la séquence est la somme des deux nombres précédents. 1367 00:55:26,050 --> 00:55:29,720 OK, donc la façon dont je vient d'être décrit Fibonacci, 1368 00:55:29,720 --> 00:55:31,530 vous pourriez entendre la récursion, non? 1369 00:55:31,530 --> 00:55:35,280 Quand je l'ai dit chaque nombre est la somme des deux nombres précédents, 1370 00:55:35,280 --> 00:55:36,420 nous pourrions dire OK. 1371 00:55:36,420 --> 00:55:38,570 Eh bien, la nième Fibonacci number-- nous allons donc 1372 00:55:38,570 --> 00:55:42,260 dire que nous avons cette fonction appelée fib fib-- de n 1373 00:55:42,260 --> 00:55:48,260 va être égale à fib de n moins 1 plus-- désolé, 1374 00:55:48,260 --> 00:55:51,240 nous allons passer à la ligne suivante sur fib ici-- de n moins 2. 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> OK, donc cela fonctionne très bien si vous êtes examiner, par exemple, la valeur zéro, un, 1377 00:55:56,790 --> 00:55:59,410 deux, trois, quatre, cinquième nombre de Fibonacci, 1378 00:55:59,410 --> 00:56:03,561 où vous pouvez dire que La figure 5 est égal à 2, plus 3. 1379 00:56:03,561 --> 00:56:05,060 Mais que faire si vous êtes au début? 1380 00:56:05,060 --> 00:56:07,184 Que faire si vous êtes juste de frapper ces deux premières valeurs? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> Pour obtenir ce 1, vous ne pouvez pas dire ajouter les deux précédents, 1383 00:56:11,330 --> 00:56:13,930 parce que nulle et-- Je ne sais pas. 1384 00:56:13,930 --> 00:56:15,390 Donc, à un moment donné, il faut arrêter. 1385 00:56:15,390 --> 00:56:21,250 À un certain moment, nous avons besoin de dire que ces deux ont juste leurs propres définitions. 1386 00:56:21,250 --> 00:56:23,890 Le nombre de Fibonacci est 0 0. 1387 00:56:23,890 --> 00:56:26,115 Et le premier nombre de Fibonacci est 1. 1388 00:56:26,115 --> 00:56:34,120 >> Donc, la façon dont je puisse coder, je dirais que si n est inférieur à deux, 1389 00:56:34,120 --> 00:56:35,130 puis juste retour n. 1390 00:56:35,130 --> 00:56:36,494 Et ce serait mon scénario de base. 1391 00:56:36,494 --> 00:56:38,660 Voilà comment je sais à arrêter avec une fonction récursive. 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 Est-ce clair? 1394 00:56:41,410 --> 00:56:41,940 Impressionnant. 1395 00:56:41,940 --> 00:56:43,260 Tout le reste sur la récursivité? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 Belle. 1398 00:56:45,930 --> 00:56:48,750 >> De laisser rapidement parler recherche et de tri gérés fois. 1399 00:56:48,750 --> 00:56:52,660 Et puis, je vais vous donner quelques Davin temps de parler des exemples de codage. 1400 00:56:52,660 --> 00:56:56,490 Voici donc la recherche principale et sortes que vous devez connaître. 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- je ne peux pas garantir, parce que je ne l'ai pas vu la quiz-- 1402 00:56:59,500 --> 00:57:01,940 mais cela vient jusqu'à questionnaire après test après cesser de fumer. 1403 00:57:01,940 --> 00:57:04,050 Donc certainement utiliser ce tableau. 1404 00:57:04,050 --> 00:57:05,682 Comme, prendre ce tableau. 1405 00:57:05,682 --> 00:57:06,890 Mettez-le sur votre feuille de triche. 1406 00:57:06,890 --> 00:57:07,931 Vous serez une personne heureuse. 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> Cela nous indique les temps d'exécution de chaque de ces algorithmes de tri et de recherche. 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 Donc, la recherche linéaire, vous pouvez voir terme temps, et même avec recherche binaire. 1411 00:57:18,850 --> 00:57:21,490 Allez sur ce que ces algorithmes faire, l'idée générale. 1412 00:57:21,490 --> 00:57:24,220 Regardez quelques-unes pseudo, sinon lui-même code. 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> Vous verrez que la bulle a une sorte supérieure lié dans le pire des cas de n carré. 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 Donc, si notre réseau est complètement en arrière avant que nous voulions faire le tri, 1417 00:57:34,680 --> 00:57:37,090 nous dirions que ce est va prendre des mesures n carrés. 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 Mais, dans le meilleur des cas, de sorte que le limite inférieure pour le meilleur des cas 1420 00:57:41,730 --> 00:57:44,300 va être si elle est déjà parfaitement triés. 1421 00:57:44,300 --> 00:57:46,671 Alors tout ce que nous avons à faire est vérifiez qu'il est bien triée. 1422 00:57:46,671 --> 00:57:47,921 Y at-il une question ici? 1423 00:57:47,921 --> 00:57:49,805 >> L'ÉLÈVE: Quand serait vous souhaitez utiliser sorte? 1424 00:57:49,805 --> 00:57:50,747 Le genre. 1425 00:57:50,747 --> 00:57:52,160 Je suis juste curieux. 1426 00:57:52,160 --> 00:57:53,510 >> HANNAH: Quand souhaitez-vous voulez utiliser la sélection sorte? 1427 00:57:53,510 --> 00:57:54,010 Celui-ci? 1428 00:57:54,010 --> 00:57:55,705 Celui qui est n au carré dans les deux cas? 1429 00:57:55,705 --> 00:57:56,860 >> L'ÉLÈVE: [inaudible]. 1430 00:57:56,860 --> 00:57:58,151 >> HANNAH: il est donc très différent. 1431 00:57:58,151 --> 00:58:00,760 Si vous avez spécifique exigences de votre programme, 1432 00:58:00,760 --> 00:58:04,887 comme des choses comme si nous venons de dire mettre en oeuvre une sorry-- search-- 1433 00:58:04,887 --> 00:58:06,720 mettre en œuvre une sorte, vous aurez voudrez probablement aller 1434 00:58:06,720 --> 00:58:09,950 pour l'un de ceux que a un meilleur cas de n, 1435 00:58:09,950 --> 00:58:12,410 ou une borne inférieure dans le meilleur des cas de n. 1436 00:58:12,410 --> 00:58:14,790 Mais il pourrait y avoir certaines choses comme, par exemple, 1437 00:58:14,790 --> 00:58:16,767 swaps sont vraiment cher pour une raison quelconque. 1438 00:58:16,767 --> 00:58:18,850 Ensuite, vous voulez faire tri à bulles, parce que vous 1439 00:58:18,850 --> 00:58:20,641 avoir à faire beaucoup swaps, des choses comme ça. 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 Toute oui other--? 1442 00:58:23,098 --> 00:58:25,488 >> L'ÉLÈVE: Serait-il [inaudible] de dire que [inaudible]? 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 HANNAH: Voilà une chose que diriez-vous à 1445 00:58:31,910 --> 00:58:33,670 Si vous êtes à la recherche à la mise en œuvre. 1446 00:58:33,670 --> 00:58:35,850 La façon dont je voudrais en fait penser pourquoi il est n 1447 00:58:35,850 --> 00:58:40,840 carré est que nous devons courir grâce à notre tableau de longueur n, 1448 00:58:40,840 --> 00:58:42,765 chaque fois jouant au plus, n swaps. 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 Et nous avons à faire ce processus n fois. 1451 00:58:46,220 --> 00:58:51,130 >> Ainsi, lorsque vous avez à faire au plus n swaps et N traverse le tableau, 1452 00:58:51,130 --> 00:58:52,380 il va y avoir de n carré. 1453 00:58:52,380 --> 00:58:55,480 Mais oui, ce sera révélé par cette double boucle, 1454 00:58:55,480 --> 00:58:59,428 que la question asked-- ou imbriquée boucle, je dois dire. 1455 00:58:59,428 --> 00:59:00,890 D'accord? 1456 00:59:00,890 --> 00:59:03,375 >> Et puis le tri par fusion, qui est le genre le plus rapide que nous aujourd'hui, 1457 00:59:03,375 --> 00:59:07,560 ou que nous avons couvert en CS50, sait que l'algorithme principal est 1458 00:59:07,560 --> 00:59:10,150 cette idée de rupture dans morceaux triés, puis 1459 00:59:10,150 --> 00:59:11,980 fusionnant ces bits triés. 1460 00:59:11,980 --> 00:59:14,170 Et va nous amener log n log n. 1461 00:59:14,170 --> 00:59:17,110 Des questions sur les recherches et sortes avant de céder la parole? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 Voyons. 1464 00:59:21,040 --> 00:59:21,800 >> Oh, les listes chaînées. 1465 00:59:21,800 --> 00:59:23,210 Désolé, je dois un sujet plus. 1466 00:59:23,210 --> 00:59:25,000 OK, impressionnant, lié listes. 1467 00:59:25,000 --> 00:59:27,900 Problème avec les tableaux, ils ont une taille fixe. 1468 00:59:27,900 --> 00:59:30,634 Donc, si vous ne savez pas quelle taille votre entrée va être, 1469 00:59:30,634 --> 00:59:32,050 vous ne voulez pas créer un tableau. 1470 00:59:32,050 --> 00:59:34,080 Parce que si nous créons une matrice qui est trop petit, 1471 00:59:34,080 --> 00:59:35,930 nous pourrions courir en dépassement de mémoire tampon. 1472 00:59:35,930 --> 00:59:38,890 >> Ainsi, au lieu, nous pourrions faire quelque chose avec les listes chaînées, qui 1473 00:59:38,890 --> 00:59:44,280 nous permet d'avoir une dynamique structure de données de taille 1474 00:59:44,280 --> 00:59:48,970 qui va nous permettre de stocker une montant plus souple des données. 1475 00:59:48,970 --> 00:59:54,030 Donc, au sein de chaque nœud dans notre liste chaînée, nous avons deux pièces. 1476 00:59:54,030 --> 00:59:56,820 Nous avons la valeur réelle qu'il stocke. 1477 00:59:56,820 --> 00:59:59,530 Voilà donc juste la chose que vous feriez voir dans le tableau, par exemple. 1478 00:59:59,530 --> 01:00:04,600 Et puis nous conservons également un pointeur vers la prochaine chose dans la mémoire. 1479 01:00:04,600 --> 01:00:06,430 >> Contrairement aux tableaux, qui nous savons allons tous 1480 01:00:06,430 --> 01:00:10,890 à être-- éléments du tableau sont tous un après l'autre dans memory-- lié 1481 01:00:10,890 --> 01:00:13,300 listes pourraient être n'importe où dans la mémoire. 1482 01:00:13,300 --> 01:00:14,590 Ils sont des emplacements arbitraires. 1483 01:00:14,590 --> 01:00:16,410 Donc, si nous étions à en fait aller les trouver, nous 1484 01:00:16,410 --> 01:00:19,770 besoin de garder une trace de la prochaine chose dans notre liste. 1485 01:00:19,770 --> 01:00:22,840 >> Et puis pour savoir où cette liste dans son ensemble est, 1486 01:00:22,840 --> 01:00:26,276 tout ce que nous avons à suivre est la premier élément de notre liste chaînée. 1487 01:00:26,276 --> 01:00:27,900 Et ça va nous permettre de suivre à travers. 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> Voilà donc comment vous pouvez définir un mode. 1490 01:00:33,070 --> 01:00:36,160 Ceci est une grande opportunité de profiter de structures. 1491 01:00:36,160 --> 01:00:39,660 Parce que vous avez cette idée, bien, pour un noeud donné, je dois deux pièces. 1492 01:00:39,660 --> 01:00:41,770 Je dois la valeur elle-même. 1493 01:00:41,770 --> 01:00:45,610 Et puis je dois un pointeur vers la élément suivant dans la liste chaînée. 1494 01:00:45,610 --> 01:00:49,150 Donc, vous voyez, nous avons un entier n, qui va être la valeur réelle, 1495 01:00:49,150 --> 01:00:53,150 et puis un pointeur vers un noeud, appelé suivante. 1496 01:00:53,150 --> 01:00:56,431 Alors que va être la prochaine élément dans notre liste chaînée. 1497 01:00:56,431 --> 01:00:56,972 L'ÉLÈVE: Oui? 1498 01:00:56,972 --> 01:01:01,920 Avez-vous de préciser que l'étoile est comme une structure? 1499 01:01:01,920 --> 01:01:05,620 >> HANNAH: Oui, depuis cette est presque comme une sorte de, 1500 01:01:05,620 --> 01:01:07,980 il semble comme un récursive définition par le fait que nous 1501 01:01:07,980 --> 01:01:12,080 besoin de savoir ce qu'est un nœud est à l'intérieur pour trouver un nœud. 1502 01:01:12,080 --> 01:01:14,450 Etant donné qu'il ne fait savoir ce qu'est un nœud est complètement 1503 01:01:14,450 --> 01:01:17,283 jusqu'à ce que nous arrivons à la fin de this-- et après cela, nous pouvons l'appeler simplement 1504 01:01:17,283 --> 01:01:21,935 un node-- à l'intérieur de cette définition, nous devons appeler un noeud de structure. 1505 01:01:21,935 --> 01:01:22,560 Grande question. 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 Rien d'autre? 1508 01:01:25,214 --> 01:01:26,198 Oui? 1509 01:01:26,198 --> 01:01:29,150 >> ÉTUDIANT: Pourquoi avons-nous dois dire nœud deux fois? 1510 01:01:29,150 --> 01:01:33,578 Parce que quand nous étions en [inaudible] nous avons juste eu à le faire en virgule, 1511 01:01:33,578 --> 01:01:37,352 mais maintenant, nous devons constater que noeud de structure? [Inaudible]. 1512 01:01:37,352 --> 01:01:39,060 HANNAH: Je crois dans le dernier exemple, 1513 01:01:39,060 --> 01:01:42,110 nous étions juste en train de créer à tout moment vous voulu utiliser un élève après cela, vous 1514 01:01:42,110 --> 01:01:46,430 dû utiliser struct node-- Je sorry-- struct étudiant. 1515 01:01:46,430 --> 01:01:51,575 Cela nous a permis de, après le fait, tout simplement utilisation nœud ajouter un nouveau type, essentiellement. 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 Ce sens? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 Il faudrait donc revenir en arrière et regarder le code avant. 1520 01:01:57,150 --> 01:01:59,025 Mais je dirais que on n'a pas utilisé typedef. 1521 01:01:59,025 --> 01:02:02,050 Et nous avons demandé à la question, Pourquoi avons-nous besoin d'utiliser typedef? 1522 01:02:02,050 --> 01:02:05,540 Typedef nous permet d'éviter la mot struct au début. 1523 01:02:05,540 --> 01:02:06,221 Oui? 1524 01:02:06,221 --> 01:02:08,095 L'ÉLÈVE: Quel genre de questions seraient venir 1525 01:02:08,095 --> 01:02:10,400 en termes en termes de nœuds et les listes chaînées? 1526 01:02:10,400 --> 01:02:15,110 >> HANNAH: Donc, une chose est que nous pourrions dire comment pourriez-vous chercher dans une liste chaînée? 1527 01:02:15,110 --> 01:02:16,930 OK, parce qu'il est un peu plus compliqué 1528 01:02:16,930 --> 01:02:18,520 que si nous sommes à la recherche à travers un réseau. 1529 01:02:18,520 --> 01:02:21,472 Nous pouvons simplement regarder élément zéro, un élément, élément deux, blah, blah, 1530 01:02:21,472 --> 01:02:21,972 bla. 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 Si nous voulons rechercher par une liste chaînée, 1533 01:02:24,420 --> 01:02:27,229 nous serions réellement devons suivre ce petit labyrinthe de pointeurs. 1534 01:02:27,229 --> 01:02:29,270 Donc, nous allons effectivement aller à travers ce très rapidement. 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 Ce que nous pourrions faire dans commander to-- disons nous 1537 01:02:32,860 --> 01:02:35,430 veulent juste itérer notre liste entièrement lié. 1538 01:02:35,430 --> 01:02:37,450 Nous pourrions commencer à la tête. 1539 01:02:37,450 --> 01:02:39,890 Et puis pour déplacer vers l'élément suivant, 1540 01:02:39,890 --> 01:02:43,680 au lieu d'une incrémentation par comme nous pourrions en passant par un tableau, 1541 01:02:43,680 --> 01:02:45,720 nous allons en fait suivre le pointeur suivant, 1542 01:02:45,720 --> 01:02:48,360 afin que nous puissions trouver où dans mémoire l'élément suivant est. 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 Donc, je sais qu'il ne suffit pas à prendre tout cela en ce moment, 1545 01:02:51,690 --> 01:02:52,650 mais vous aurez ces diapositives. 1546 01:02:52,650 --> 01:02:54,730 Ainsi, vous pouvez passer par ce un peu plus lentement. 1547 01:02:54,730 --> 01:02:56,890 Mais essentiellement, ce que nous voulons à faire est de suivre ces pointeurs 1548 01:02:56,890 --> 01:02:58,550 à travers la totalité de la liste chaînée. 1549 01:02:58,550 --> 01:03:00,258 Donc la question est vous pourriez être invité. 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> Quelque chose à remarquer avec insertion, disons 1552 01:03:03,980 --> 01:03:07,925 nous avons voulu mettre un nouvel élément à l'avant de notre liste chaînée. 1553 01:03:07,925 --> 01:03:10,800 Nous devons être très prudents sur l'ordre dans lequel on 1554 01:03:10,800 --> 01:03:12,760 réaffecté les pointeurs. 1555 01:03:12,760 --> 01:03:15,230 Parce que disons que je viens de dire OK. 1556 01:03:15,230 --> 01:03:18,930 Assurez-point de la tête de ce nouvel élément. 1557 01:03:18,930 --> 01:03:23,550 Il suffit de faire pointer ensuite à 1, nous avons essentiellement perdu le reste de notre liste, 1558 01:03:23,550 --> 01:03:25,860 parce que je ne me souviens pas où 2 vies. 1559 01:03:25,860 --> 01:03:27,730 >> Donc, nous avons à faire à un ordre très spécifique. 1560 01:03:27,730 --> 01:03:31,500 Tout d'abord, nous faisons la nouvelle Point à la tête de l'élément. 1561 01:03:31,500 --> 01:03:33,970 Et puis nous faisons la tête pointer vers le nouvel élément. 1562 01:03:33,970 --> 01:03:38,455 Voyons donc à quoi ça ressemble avec arrows-- juste comme ça. 1563 01:03:38,455 --> 01:03:42,080 Donc, vous devez d'abord la nouvelle Point à la vieille tête de l'élément. 1564 01:03:42,080 --> 01:03:45,990 Et maintenant, nous avons la tête pointer vers le nouveau premier élément. 1565 01:03:45,990 --> 01:03:47,187 Vous avez des questions à cet égard? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> OK, voici un code nouveau, quelque chose à regarder un peu plus tard. 1568 01:03:54,350 --> 01:03:58,630 Et maintenant, je vais céder la parole à Davin pour GDB et un peu de pratique 1569 01:03:58,630 --> 01:03:59,480 codage sur papier. 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 Belle. 1572 01:04:01,096 --> 01:04:01,810 >> ROB: Et Rob. 1573 01:04:01,810 --> 01:04:02,360 >> HANNAH: Oh, Davin et Rob. 1574 01:04:02,360 --> 01:04:03,055 Je suis désolé. 1575 01:04:03,055 --> 01:04:03,596 >> L'ÉLÈVE: Woo! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ROB: Merci. 1578 01:04:09,110 --> 01:04:11,209 >> DAVIN: Voulez-vous dire tout réel rapide? 1579 01:04:11,209 --> 01:04:11,875 ROB: Ouais, ouais. 1580 01:04:11,875 --> 01:04:12,845 DAVIN: Une fois que je suis debout. 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 OK, tandis que Rob met la microphone, alors quel est GDB? 1583 01:04:19,520 --> 01:04:23,945 Tout le monde devrait avoir vu GDB classe et aussi à des heures de bureau. 1584 01:04:23,945 --> 01:04:25,070 Et vous devriez être utiliser. 1585 01:04:25,070 --> 01:04:25,750 Alors, quelle est GDB? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 Tout le monde? 1588 01:04:28,850 --> 01:04:29,540 >> L'ÉLÈVE: Il est un débogueur. 1589 01:04:29,540 --> 01:04:30,250 >> DAVIN: Il est un débogueur. 1590 01:04:30,250 --> 01:04:31,624 Et qu'est-ce que vous permet de faire? 1591 01:04:31,624 --> 01:04:33,064 Comme, pourquoi aimons-nous GDB? 1592 01:04:33,064 --> 01:04:34,480 ÉTUDIANT: Pour ralentir le programme. 1593 01:04:34,480 --> 01:04:36,740 DAVIN: droit, de sorte que vous pouvez marcher travers comme un rythme humain. 1594 01:04:36,740 --> 01:04:38,490 Et si ce sont quelques-uns commandes que vous pouvez faire? 1595 01:04:38,490 --> 01:04:40,407 Eh bien, la rupture est probablement votre commande favorite. 1596 01:04:40,407 --> 01:04:43,240 Parce que vous permet de casser la programme et fait marcher à travers elle 1597 01:04:43,240 --> 01:04:44,280 ligne par ligne. 1598 01:04:44,280 --> 01:04:46,500 >> Run vous permet de l'exécuter. 1599 01:04:46,500 --> 01:04:48,210 Ensuite, comme marcher à travers. 1600 01:04:48,210 --> 01:04:49,820 Quelle est la prochaine et entre étape? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 Attendez, dire à haute voix. 1603 01:04:53,190 --> 01:04:54,060 Il avait raison. 1604 01:04:54,060 --> 01:04:55,280 >> L'ÉLÈVE: [inaudible]. 1605 01:04:55,280 --> 01:04:56,190 >> DAVIN: Oui, impressionnant. 1606 01:04:56,190 --> 01:04:59,210 Donc, comme, à côté et l'étape, si you're-- disons que vous avez une fonction 1607 01:04:59,210 --> 01:04:59,950 définir. 1608 01:04:59,950 --> 01:05:03,350 Disons que certains dans votre fonction principale, et vous frapper juste à côté, à côté, 1609 01:05:03,350 --> 01:05:03,850 suivant. 1610 01:05:03,850 --> 01:05:05,910 Vous allez effectivement exécuter cette fonction, 1611 01:05:05,910 --> 01:05:07,285 mais vous allez sauter par-dessus. 1612 01:05:07,285 --> 01:05:09,711 Si vous frappez pas, ou s ou que ce soit, vous êtes 1613 01:05:09,711 --> 01:05:11,460 va réellement sauter dans cette fonction, 1614 01:05:11,460 --> 01:05:14,110 et puis vous pouvez frapper à côté pour voir les différents appels 1615 01:05:14,110 --> 01:05:16,170 à l'intérieur de cette fonction particulière. 1616 01:05:16,170 --> 01:05:16,670 Ouais? 1617 01:05:16,670 --> 01:05:18,670 >> L'ÉLÈVE: Est-il possible à sauter, comme, revenir en arrière? 1618 01:05:18,670 --> 01:05:20,750 DAVIN: Terminer, ouais, en finir avec vous sauter. 1619 01:05:20,750 --> 01:05:22,570 Donc, ça va finir que fonction, et puis vous êtes 1620 01:05:22,570 --> 01:05:24,153 sera de retour en principal, par exemple. 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 Impression imprimer une seule fois. 1623 01:05:27,370 --> 01:05:29,381 Quelque chose que je l'utilise toujours est affichée. 1624 01:05:29,381 --> 01:05:31,880 L'affichage imprimer constamment tout au long de la totalité 1625 01:05:31,880 --> 01:05:32,470 de votre programme. 1626 01:05:32,470 --> 01:05:33,810 >> Par exemple, si vous êtes dans une boucle, et vous 1627 01:05:33,810 --> 01:05:37,018 envie de voir comment quelque chose est en évolution, et vous ne voulez pas, comme, constamment 1628 01:05:37,018 --> 01:05:38,940 être faire comme impression, impression, impression, affichage 1629 01:05:38,940 --> 01:05:43,230 affiche cette variable en continu, chaque fois que vous cliquez sur suivant. 1630 01:05:43,230 --> 01:05:44,310 Et continuer. 1631 01:05:44,310 --> 01:05:45,905 Donc GBD, qui est GDB. 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> L'ÉLÈVE: Quelle est la seule où vous [inaudible]? 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 DAVIN: Qu'est-ce? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> L'ÉLÈVE: Quelle est the-- les variables locales. 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 ROB: Il ya quelque chose en fait comme les locaux ou quelque chose. 1640 01:05:57,780 --> 01:05:58,140 Je can't-- 1641 01:05:58,140 --> 01:05:59,930 >> DAVIN: Il pourrait être quelque chose comme ça, oui. 1642 01:05:59,930 --> 01:06:00,830 >> HANNAH: Dans les locaux? 1643 01:06:00,830 --> 01:06:01,510 >> DAVIN: Voilà. 1644 01:06:01,510 --> 01:06:02,134 Voilà l'un. 1645 01:06:02,134 --> 01:06:03,040 ROB: Belle. 1646 01:06:03,040 --> 01:06:04,030 >> DAVIN: Ouais. 1647 01:06:04,030 --> 01:06:06,010 >> ÉTUDIANT: Qu'est-ce que continuer faire? 1648 01:06:06,010 --> 01:06:08,010 >> DAVIN: Il continues-- il est donc juste va continuer vos programmes. 1649 01:06:08,010 --> 01:06:09,843 Donc, si vous cassez et frappez continuer, ça va 1650 01:06:09,843 --> 01:06:13,119 seulement de lancer ce programme jusqu'à ce que il frappe à nouveau cette pause. 1651 01:06:13,119 --> 01:06:14,910 Ainsi, par exemple, si vous cassé dans une fonction, 1652 01:06:14,910 --> 01:06:16,720 et vous allez faire comme pour boucle ou quelque chose comme ça, 1653 01:06:16,720 --> 01:06:19,869 et vous frappez continuer, il va continuer et revenir à cette pause. 1654 01:06:19,869 --> 01:06:22,660 Ou il n'y a pas rupture, il va continuer et terminer le programme. 1655 01:06:22,660 --> 01:06:25,000 >> ROB: Ainsi, tout comme les arrêts exécuter au premier point d'arrêt 1656 01:06:25,000 --> 01:06:27,010 vous frappez, si vous puis touchées continuent, il va garder 1657 01:06:27,010 --> 01:06:28,070 va jusqu'à ce qu'il soit le prochain point d'arrêt. 1658 01:06:28,070 --> 01:06:30,111 Et puis continuer ira au point d'arrêt suivant. 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 DAVIN: D'autres questions sur GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 Donc je pense que dans le passé, nous vous avons demandé ce que 1663 01:06:35,410 --> 01:06:37,690 GDB est et donner un exemple de certaines choses que vous 1664 01:06:37,690 --> 01:06:40,770 peut faire avec GDB, si réel simple, mais ouais. 1665 01:06:40,770 --> 01:06:42,280 Là vous allez. 1666 01:06:42,280 --> 01:06:43,250 Et noeuds? 1667 01:06:43,250 --> 01:06:49,571 >> ROB: Oui, si la direction était-ce? 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 L'ÉLÈVE: Cela était-il. 1670 01:06:51,726 --> 01:06:52,160 DAVIN: Attendez. 1671 01:06:52,160 --> 01:06:52,270 ROB: Ce gars? 1672 01:06:52,270 --> 01:06:52,936 DAVIN: Celui-là. 1673 01:06:52,936 --> 01:06:54,660 ROB: Ce gars, oh, je ne savais pas. 1674 01:06:54,660 --> 01:06:56,940 Nous étions donc pas clair sur ce que je ne fais pas the-- 1675 01:06:56,940 --> 01:06:58,680 savoir qui il était-- mais la question. 1676 01:06:58,680 --> 01:07:01,180 Nous ne savons pas exactement ce que vous demandaient à ce sujet, si juste 1677 01:07:01,180 --> 01:07:04,800 de clarifier quelque chose. 1678 01:07:04,800 --> 01:07:07,750 Alors d'abord, comme je l'ai dit avant, typedef vous êtes toujours en utilisant seulement 1679 01:07:07,750 --> 01:07:09,305 créer un surnom pour un type. 1680 01:07:09,305 --> 01:07:13,420 Donc ici, le surnom que nous sommes la création est pour ce noeud de structure de type. 1681 01:07:13,420 --> 01:07:18,070 >> Alors d'abord, en ignorant ce nœud dans le typedef, si cette structure noeud bouclés 1682 01:07:18,070 --> 01:07:21,060 préparez-bas à côté bouclés accolade est le type de nœud de structure. 1683 01:07:21,060 --> 01:07:23,470 Et nous avons besoin de ce noeud là-haut, parce que nous 1684 01:07:23,470 --> 01:07:25,190 besoin de référencer nœud ici. 1685 01:07:25,190 --> 01:07:29,380 Donc, avec ce genre de structure récursive, vous devez donner à cette structure un nom, 1686 01:07:29,380 --> 01:07:31,340 ou bien vous ne pouviez pas dire nœud struct ici. 1687 01:07:31,340 --> 01:07:33,340 Alors qu'avant avec étudiant lorsque nous avons tapé, je pense, 1688 01:07:33,340 --> 01:07:35,423 nous ne devons pas dire étudiant là-bas, parce que nous 1689 01:07:35,423 --> 01:07:40,370 ne pas avoir à dire struct étudiant l'intérieur de la structure elle-même. 1690 01:07:40,370 --> 01:07:43,730 Donc, il est le récursive qui nous oblige à dire nœud il. 1691 01:07:43,730 --> 01:07:46,610 >> Ce noeud est juste le nom que nous sommes donnant noeud pour le typedef. 1692 01:07:46,610 --> 01:07:48,520 Ainsi, ce noeud est pas la même chose que ce noeud. 1693 01:07:48,520 --> 01:07:51,567 Mais ce nœud de structure est la même que celui noeud de structure. 1694 01:07:51,567 --> 01:07:54,150 DAVIN: Donc, lorsque vous appelez, comme, nœud dans votre fonction principale, 1695 01:07:54,150 --> 01:07:55,350 tu ne vas pas à dois dire que nœud de structure. 1696 01:07:55,350 --> 01:07:58,360 Vous pouvez juste dire nœud, car un noeud est different-- est fondamentalement 1697 01:07:58,360 --> 01:07:59,440 vous dites, OK. 1698 01:07:59,440 --> 01:08:01,490 Au lieu d'avoir à appeler noeud de structure dans mon code, 1699 01:08:01,490 --> 01:08:04,050 Je veux juste renommer comme noeud de rendre plus facile. 1700 01:08:04,050 --> 01:08:06,800 >> ROB: Si vous avez toujours utiliser typedef, alors ce 1701 01:08:06,800 --> 01:08:11,240 est le seul endroit où vous allez avoir pour déclarer une variable avec nœud de structure 1702 01:08:11,240 --> 01:08:11,740 étoile, oui. 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> DAVIN: OK, donc la dernière partie est difficile d'enseigner because-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ROB: Quoi? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> DAVIN: Parce que ça codage sur papier. 1709 01:08:25,649 --> 01:08:28,689 Ainsi, chaque année, nous avons Code sur les questions de papier. 1710 01:08:28,689 --> 01:08:32,510 Donc, je pense que l'année dernière, 12 des 80 points étaient code sur papier. 1711 01:08:32,510 --> 01:08:36,720 Année d'avant, 10 sur 80, année d'avant, 20 sur 100, 1712 01:08:36,720 --> 01:08:37,939 si un certain nombre de ces. 1713 01:08:37,939 --> 01:08:40,970 Donc, vous allez avoir de pouvoir à coder ces fonctions à la main. 1714 01:08:40,970 --> 01:08:45,340 >> Alors je pensé que nous pourrions passer par un deux d'entre eux et de voir comment les gens font, 1715 01:08:45,340 --> 01:08:47,340 genre de marcher à travers les lentement avec les gens. 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 Donc, en général, et strlen atoi ont été très populaires. 1718 01:08:52,420 --> 01:08:55,670 L'année dernière, je pense que nous avions GetPositiveInt et randomInt. 1719 01:08:55,670 --> 01:08:58,591 Mais pow, donc puissance, aussi positif aussi. 1720 01:08:58,591 --> 01:09:00,965 Rentrons à travers peut-être un ou deux de ceux-ci ensemble. 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 Qu'est-ce que les gens veulent voir? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> L'ÉLÈVE: Atoi. 1725 01:09:05,767 --> 01:09:06,350 L'ÉLÈVE: Oui. 1726 01:09:06,350 --> 01:09:06,859 DAVIN: Atoi? 1727 01:09:06,859 --> 01:09:07,800 L'ÉLÈVE: [inaudible]. 1728 01:09:07,800 --> 01:09:09,682 DAVIN: OK, je vais de le faire sur la carte. 1729 01:09:09,682 --> 01:09:11,765 Avez-vous une préférence si je le fais ici ou là? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 Là, Gabe dit il. 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> ROB: Et voilà réflexions générales sur ces questions de codage. 1734 01:09:19,580 --> 01:09:21,705 Essayez d'écrire quelque chose. 1735 01:09:21,705 --> 01:09:22,580 Ne pas laisser le champ vide. 1736 01:09:22,580 --> 01:09:23,080 >> DAVIN: Oui. 1737 01:09:23,080 --> 01:09:25,520 ROB: Si vous pouvez obtenir le retourner type correct, 1738 01:09:25,520 --> 01:09:27,090 ou peut-être que nous pourrions donner à vous, mais si vous le pouvez, comme, 1739 01:09:27,090 --> 01:09:30,256 écrire la signature de la fonction générale, Si vous pouvez obtenir les cas de base correcte, 1740 01:09:30,256 --> 01:09:32,244 ou des cas d'angle, ou se souvenir chèque de nul, 1741 01:09:32,244 --> 01:09:34,160 aussi longtemps que vous avez une certaine choses, alors peut-être nous 1742 01:09:34,160 --> 01:09:35,880 peut vous donner quelques points pour le problème. 1743 01:09:35,880 --> 01:09:36,810 Ne pas laisser le champ vide. 1744 01:09:36,810 --> 01:09:38,560 >> DAVIN: Oui, et si vous sont juste complètement 1745 01:09:38,560 --> 01:09:40,580 perplexe sur la façon de en fait se transformer en code. 1746 01:09:40,580 --> 01:09:43,140 Si vous écrivez pseudo, qui est très bon aussi. 1747 01:09:43,140 --> 01:09:46,390 Donc, il est comme, il est une question en six points, et vous écrivez le bon pseudo, 1748 01:09:46,390 --> 01:09:47,858 vous aurez au moins deux points. 1749 01:09:47,858 --> 01:09:49,149 Donc, ne pas laisser pas vide. 1750 01:09:49,149 --> 01:09:50,279 Essayez de mettre quelque chose. 1751 01:09:50,279 --> 01:09:51,770 >> ROB: Il doit être le bon pseudo, cependant. 1752 01:09:51,770 --> 01:09:52,270 >> DAVIN: Oui. 1753 01:09:52,270 --> 01:09:55,381 ROB: Donc, nous sommes généralement sont moins indulgent avec des bugs dans pseudo. 1754 01:09:55,381 --> 01:09:57,130 Davin: OK, si vous les gars voulu voir atoi. 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 OK, si juste really-- si ce que vous voulez faire 1757 01:10:02,820 --> 01:10:04,969 est vous allez être donné une sorte de numéro. 1758 01:10:04,969 --> 01:10:07,010 Mais ce nombre est pas va être un int, non? 1759 01:10:07,010 --> 01:10:08,574 Qu'est-ce que ça va être? 1760 01:10:08,574 --> 01:10:09,480 >> L'ÉLÈVE: [inaudible]. 1761 01:10:09,480 --> 01:10:11,146 >> DAVIN: Ça va être une chaîne, non? 1762 01:10:11,146 --> 01:10:13,160 Donc, si vous avez reçu un string-- nous allons say-- 1763 01:10:13,160 --> 01:10:15,228 >> ROB: Dois-je tirer un éditeur? 1764 01:10:15,228 --> 01:10:16,200 Je peux tirer up-- 1765 01:10:16,200 --> 01:10:16,800 >> DAVIN: Oh, vous voulez faire on-- 1766 01:10:16,800 --> 01:10:17,420 >> ROB: Préférez-vous la carte? 1767 01:10:17,420 --> 01:10:18,800 >> DAVIN: Que voulez-vous faire? 1768 01:10:18,800 --> 01:10:19,900 Je veux dire, est-ce que vous voulez faire à la main? 1769 01:10:19,900 --> 01:10:21,460 Ou voulez-vous faire par ordinateur? 1770 01:10:21,460 --> 01:10:22,180 >> ROB: faire à la main. 1771 01:10:22,180 --> 01:10:22,805 >> DAVIN: [Rires] 1772 01:10:22,805 --> 01:10:23,950 ROB: faire à la main. 1773 01:10:23,950 --> 01:10:25,469 >> DAVIN: OK, donc ça va être atoi. 1774 01:10:25,469 --> 01:10:27,760 Alors, quel est it-- Je veux dire, nous allons probablement vous donner ceci. 1775 01:10:27,760 --> 01:10:29,106 Mais qu'est-ce que ça va revenir? 1776 01:10:29,106 --> 01:10:29,452 >> L'ÉLÈVE: Int. 1777 01:10:29,452 --> 01:10:31,076 >> DAVIN: Il va revenir int, non? 1778 01:10:31,076 --> 01:10:33,772 So-- Je ne veux pas le faire là-bas. 1779 01:10:33,772 --> 01:10:34,510 Je vais le faire ici. 1780 01:10:34,510 --> 01:10:36,596 >> ROB: Vous pouvez tirer vers le bas et puis poussez sur elle. 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> DAVIN: oui. 1783 01:10:40,385 --> 01:10:43,880 [Rires] changement de jeu. 1784 01:10:43,880 --> 01:10:50,950 OK, donc ça va être atoi int, et ce que ça va prendre? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 Une étoile de char, si juste chaîne, étoile s, comme ça. 1787 01:10:57,780 --> 01:10:59,240 >> ROB: Belle étoile, agréable. 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 DAVIN: Cela pourrait ne pas être là, OK. 1790 01:11:04,040 --> 01:11:04,540 ROB: Ouais. 1791 01:11:04,540 --> 01:11:06,670 DAVIN: OK, donc la première chose que vous voulez que je do-- 1792 01:11:06,670 --> 01:11:08,490 Je ne sais pas si quelqu'un a regardé à la solutions-- de pratique 1793 01:11:08,490 --> 01:11:10,150 mais ce que vous allez à vouloir faire est vous êtes 1794 01:11:10,150 --> 01:11:11,570 allez vouloir avoir une boucle, parce que vous êtes 1795 01:11:11,570 --> 01:11:14,100 allez vouloir réellement parcourir cette chaîne. 1796 01:11:14,100 --> 01:11:18,880 Donc helpful-- alors disons nous allons une boucle, 1797 01:11:18,880 --> 01:11:22,270 et nous allons passer en revue chaque élément de la chaîne. 1798 01:11:22,270 --> 01:11:23,470 Combien de temps est-ce? 1799 01:11:23,470 --> 01:11:26,464 Combien de fois allons-nous à parcourir en ce que pour la boucle? 1800 01:11:26,464 --> 01:11:27,130 L'ÉLÈVE: Sterln? 1801 01:11:27,130 --> 01:11:27,963 DAVIN: Sterln, ouais. 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 Donc, disons que int longueur égale sterln s. 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 Et tout simplement curieux, pourquoi est-il toujours bon de mieux faire à l'extérieur de boucles? 1806 01:11:48,740 --> 01:11:52,277 Comme, pourquoi est-il préférable de faire appel cette fonction à l'extérieur d'une boucle? 1807 01:11:52,277 --> 01:11:53,360 Il suffit de cocher une santé mentale rapide? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 Ouais? 1810 01:11:56,311 --> 01:11:58,268 Etudiant: Ainsi vous ne le faites pas avoir à garder le contrôle de lui. 1811 01:11:58,268 --> 01:11:59,400 Vous pouvez juste [inaudible]. 1812 01:11:59,400 --> 01:12:01,560 >> DAVIN: Exactement, alors oui, exactement ce qu'elle a dit. 1813 01:12:01,560 --> 01:12:03,101 Donc, nous ne devons pas continuer à vérifier. 1814 01:12:03,101 --> 01:12:05,690 Ainsi, par exemple, si je vous appelle cette fonction dans une boucle, 1815 01:12:05,690 --> 01:12:08,050 alors je vais continuer à appeler cette fonction à plusieurs reprises. 1816 01:12:08,050 --> 01:12:10,080 Et cela va diminuer l'efficacité de votre programme. 1817 01:12:10,080 --> 01:12:12,370 Donc, il est toujours utile de déclarer à l'extérieur. 1818 01:12:12,370 --> 01:12:14,370 >> ROB: ce qui est dit, sur aucun de ces problèmes, 1819 01:12:14,370 --> 01:12:17,940 à peu près aussi longtemps que vous obtenez une solution de travail, vous obtenez un crédit complet. 1820 01:12:17,940 --> 01:12:20,820 Donc, ne vous inquiétez pas si votre conception est absolument horrible. 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 Il pourrait nous faire bouleversé la lecture de votre code. 1823 01:12:25,230 --> 01:12:28,160 Mais tant que cela fonctionne, vous obtiendrez des points. 1824 01:12:28,160 --> 01:12:29,302 >> DAVIN: Oui. 1825 01:12:29,302 --> 01:12:31,260 OK, alors je vais déclarer une variable. 1826 01:12:31,260 --> 01:12:33,900 Il va juste appeler int somme. 1827 01:12:33,900 --> 01:12:37,031 Et je vais régler cette égale à zéro, comme cela. 1828 01:12:37,031 --> 01:12:38,780 Et que va juste d'être un espace réservé. 1829 01:12:38,780 --> 01:12:40,960 Donc cela va être ce que je vais revenir. 1830 01:12:40,960 --> 01:12:43,730 Je vais donc, à terme, retourner somme de ce programme. 1831 01:12:43,730 --> 01:12:44,980 Je dois donc ces deux variables. 1832 01:12:44,980 --> 01:12:45,563 Je dois longueur. 1833 01:12:45,563 --> 01:12:46,500 Je dois somme. 1834 01:12:46,500 --> 01:12:48,290 Et maintenant, nous allons sauter dans notre chaîne. 1835 01:12:48,290 --> 01:12:49,510 >> Donc permet d'avoir notre boucle. 1836 01:12:49,510 --> 01:13:06,520 Donc quatre int I est égale à 0 W, tandis que I est inférieur longueur je plus plus. 1837 01:13:06,520 --> 01:13:07,150 Et maintenant-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 ROB: Nice. 1840 01:13:11,420 --> 01:13:14,030 DAVIN: OK, et maintenant ici vient la viande de notre code. 1841 01:13:14,030 --> 01:13:17,380 Ainsi, vous pouvez réellement faire ce essentiellement en une ligne. 1842 01:13:17,380 --> 01:13:20,702 Donc ce que quelqu'un a une idée de ce que nous allons faire ensuite? 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 OK, donc ce est OK. 1845 01:13:25,380 --> 01:13:35,860 Nous faisons donc dire somme equals-- permettez-moi de Scoot cette somme over-- 1846 01:13:35,860 --> 01:13:50,010 est égale à la somme de 10 plus-- nous sommes va prendre s I moins un 1847 01:13:50,010 --> 01:13:54,787 citant 0 une citation fait, comme ça. 1848 01:13:54,787 --> 01:13:55,620 ROB: Très intuitive. 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> DAVIN: écrasé. 1851 01:13:57,880 --> 01:14:01,438 OK, donc someone-- je l'ai eu, je l'ai eu. 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 OK, si cela est clairement à la hausse. 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 Qu'est-ce que cela signifie? 1856 01:14:09,450 --> 01:14:12,120 Donc, personne ne sais ce que cela signifie? 1857 01:14:12,120 --> 01:14:13,826 Tout le monde peut voir cela? 1858 01:14:13,826 --> 01:14:16,088 Non, personne ne peut le voir, OK. 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 Je vais to-- 1861 01:14:18,340 --> 01:14:20,506 >> ROB: Je vais écrire la formule juste ici. 1862 01:14:20,506 --> 01:14:23,140 DAVIN: OK, Rob va le faire sur l'ordinateur, ce qui est amusant. 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ROB: Oh mon Dieu. 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 Ou je ne veux pas. 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 DAVIN: Stand by. 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 Etudiant: Je voudrais poser une question. 1871 01:14:44,260 --> 01:14:45,348 DAVIN: Oui, bien sûr. 1872 01:14:45,348 --> 01:14:46,223 L'ÉLÈVE: [inaudible]? 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 DAVIN: OK, donc il en fait, comme, juste en général, 1875 01:14:54,570 --> 01:14:56,710 Si vous deviez mettre, comme, dans cette déclaration int 1876 01:14:56,710 --> 01:14:59,770 I est égale à la longueur de 0 virgule égaux sterln, that-- 1877 01:14:59,770 --> 01:15:01,200 >> L'ÉLÈVE: [inaudible]. 1878 01:15:01,200 --> 01:15:03,585 >> DAVIN: Ça va, parce que that-- 1879 01:15:03,585 --> 01:15:05,543 ÉTUDIANT: Pourquoi voudriez-vous même pas besoin d'utiliser la longueur? 1880 01:15:05,543 --> 01:15:08,620 Pourquoi ne pourrions-nous pas tout simplement [inaudible] sterln s, comme tout le temps [inaudible]? 1881 01:15:08,620 --> 01:15:09,460 >> DAVIN: Vous voulez dire ici? 1882 01:15:09,460 --> 01:15:10,001 >> L'ÉLÈVE: Oui. 1883 01:15:10,001 --> 01:15:12,630 DAVIN: Parce que chaque temps pour cette exécution de la boucle, 1884 01:15:12,630 --> 01:15:14,295 il va évaluer cette condition. 1885 01:15:14,295 --> 01:15:14,920 L'ÉLÈVE: Oui. 1886 01:15:14,920 --> 01:15:16,836 DAVIN: Et si vous avez sterln là, alors il est 1887 01:15:16,836 --> 01:15:19,510 allez avoir à réellement appeler cette fonction à chaque fois unique. 1888 01:15:19,510 --> 01:15:21,090 Ainsi, au lieu de juste comparant à un int, 1889 01:15:21,090 --> 01:15:23,548 vous allez être appeler un fonction et de le comparer 1890 01:15:23,548 --> 01:15:24,510 de la valeur de retour. 1891 01:15:24,510 --> 01:15:25,860 Ouais, il est donc juste, oui. 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> Nice, OK, maintenant tout le monde peut le voir. 1894 01:15:30,770 --> 01:15:33,400 Qu'est-ce que cela ressemble à does--, ce qu'il est. 1895 01:15:33,400 --> 01:15:34,580 Ceci est la confiture, ici. 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 Qu'est-ce que cela veut dire? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 Que fais-je? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 Ouais, une idée? 1902 01:15:42,880 --> 01:15:43,482 Ouais? 1903 01:15:43,482 --> 01:15:45,692 >> L'ÉLÈVE: Eh bien, quand vous entrez dans un tableau, 1904 01:15:45,692 --> 01:15:47,525 vous allez aller de gauche à droite, 1905 01:15:47,525 --> 01:15:51,786 si vous allez à aller dans décimal de la touche [inaudible]. 1906 01:15:51,786 --> 01:15:52,410 DAVIN: Exactement. 1907 01:15:52,410 --> 01:15:55,063 Etudiant: Ainsi chacun vous devez multiplier 1908 01:15:55,063 --> 01:15:59,490 ce que vous avez vu que la valeur de l'int par le temps vous rendre à déplacer que sur une. 1909 01:15:59,490 --> 01:16:01,590 >> DAVIN: Parfait, parfait, Ainsi, par exemple, nous allons 1910 01:16:01,590 --> 01:16:05,376 dis-je donné vous-- je suis vais écrire ici. 1911 01:16:05,376 --> 01:16:06,480 Non, je ne suis pas. 1912 01:16:06,480 --> 01:16:08,640 Je vais écrire ici. 1913 01:16:08,640 --> 01:16:12,080 Disons que je vous ai donné 76, non? 1914 01:16:12,080 --> 01:16:13,380 Disons que je vous donne 76. 1915 01:16:13,380 --> 01:16:15,360 Voilà une chaîne pour commencer, OK? 1916 01:16:15,360 --> 01:16:16,840 >> Donc longueur est quoi? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2, non? 1919 01:16:19,060 --> 01:16:20,290 Somme est 0. 1920 01:16:20,290 --> 01:16:21,600 Puis nous sautons dans notre boucle. 1921 01:16:21,600 --> 01:16:24,187 OK, la première itération de ce, qu'est-ce que ça va être? 1922 01:16:24,187 --> 01:16:25,270 Ça va être somme est 0. 1923 01:16:25,270 --> 01:16:27,180 Donc résumer fois 10 0. 1924 01:16:27,180 --> 01:16:28,500 Voilà sens. 1925 01:16:28,500 --> 01:16:29,880 Alors qu'est-ce que cela fait? 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 L'ÉLÈVE: [inaudible]. 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> DAVIN: Il va tourner que caractère en un entier, non? 1930 01:16:37,430 --> 01:16:42,160 Il est un peu comme avec votre problème set-- ce light-- 1931 01:16:42,160 --> 01:16:44,170 il est un peu comme avec problème réglé Visioneer. 1932 01:16:44,170 --> 01:16:45,980 Vous avez affaire à des valeurs ASCII. 1933 01:16:45,980 --> 01:16:48,520 Donc, si je vous donne, comme un sept, mais il est un personnage, 1934 01:16:48,520 --> 01:16:50,965 et vous voulez savoir, OK, ce chiffre est-ce? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 Oui, vous pouvez, ouais. 1937 01:16:54,910 --> 01:16:55,900 Donc, ce chiffre est-ce? 1938 01:16:55,900 --> 01:16:59,550 Vous pouvez soustraire de 0, mais vous avoir à soustraire 0, le caractère. 1939 01:16:59,550 --> 01:17:01,425 >> Et où certaines personnes se trébuché, ils sont 1940 01:17:01,425 --> 01:17:04,260 comme, OK, bien, je dois savoir les valeurs ASCII pour ce quiz? 1941 01:17:04,260 --> 01:17:06,218 Non, vous faites certainement pas besoin de savoir l'ASCII 1942 01:17:06,218 --> 01:17:09,520 valeurs de, comme, en minuscules un, majuscules A, zéro. 1943 01:17:09,520 --> 01:17:12,060 >> ROB: Il n'y a pas de raison de jamais mettre cela sur la feuille de triche. 1944 01:17:12,060 --> 01:17:14,226 >> DAVIN: faire Certainement pas perdre votre espace avec cette. 1945 01:17:14,226 --> 01:17:18,090 Vous pouvez literally-- juste place de dire 48, comme jusqu'à 1946 01:17:18,090 --> 01:17:24,630 y, qui est équivalente à dire une, une apostrophe, 1947 01:17:24,630 --> 01:17:27,680 comme ça, exactement la même. 1948 01:17:27,680 --> 01:17:34,106 >> ROB: On pourrait presque penser de ce que si-- Dieu, je dois ma, 1949 01:17:34,106 --> 01:17:37,490 oops-- on pourrait presque penser comme si nous avions quelque chose comme ça hachage 1950 01:17:37,490 --> 01:17:39,755 définir en tant que 0 48. 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 Cela ne marchera pas. 1953 01:17:42,030 --> 01:17:45,502 Mais pensez-y comme apostrophe 0 apostrophe, et pour tous les caractères. 1954 01:17:45,502 --> 01:17:47,960 Pensez-y comme une constante représente la valeur ASCII. 1955 01:17:47,960 --> 01:17:49,080 >> DAVIN: Oui. 1956 01:17:49,080 --> 01:17:52,820 OK, donc la première fois à travers, si avec 76-- si la première fois à travers, 1957 01:17:52,820 --> 01:17:57,260 ceci est juste le caractère 7 moins le caractère 0, 1958 01:17:57,260 --> 01:18:00,420 et ce sont sept integers-- bien, ceux 1959 01:18:00,420 --> 01:18:04,030 sept espaces éloignés les uns des les autres sur la table ASCII ou autre. 1960 01:18:04,030 --> 01:18:06,770 Alors que ça va revenir un int de 7. 1961 01:18:06,770 --> 01:18:08,720 Alors maintenant, somme égale à 7. 1962 01:18:08,720 --> 01:18:10,830 >> OK, bien, nous allons sauter dans cette boucle de nouveau. 1963 01:18:10,830 --> 01:18:13,010 OK, maintenant il est temps somme 10. 1964 01:18:13,010 --> 01:18:15,800 Donc, vous êtes effectivement déplacer le 7 vers la gauche. 1965 01:18:15,800 --> 01:18:17,542 Est-ce logique? 1966 01:18:17,542 --> 01:18:19,250 Vous êtes efficace le déplaçant vers la gauche. 1967 01:18:19,250 --> 01:18:21,790 >> Et puis vous add-- cette va être moins 6 0. 1968 01:18:21,790 --> 01:18:22,650 Voilà 6. 1969 01:18:22,650 --> 01:18:24,752 Donc, ça va être 70 plus 6. 1970 01:18:24,752 --> 01:18:25,996 76, qui est votre numéro. 1971 01:18:25,996 --> 01:18:28,370 Donc, quel que soit le nombre Je vous ai donné, il est lentement juste 1972 01:18:28,370 --> 01:18:31,610 va changer les valeurs les plus élevées vers la gauche, une facteur de 10 1973 01:18:31,610 --> 01:18:35,525 à chaque fois dans la boucle, et ensuite ajouter si nécessaire. 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> Dans le dos? 1976 01:18:37,865 --> 01:18:40,240 L'ÉLÈVE: Nous ne disposons pas de faire tout vérifier dans le programme? 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ROB: Pour autant que la vérification va pour le programme, 1979 01:18:44,302 --> 01:18:46,510 nous vous dire assez beaucoup ce que vous devez vérifier. 1980 01:18:46,510 --> 01:18:48,670 Si nous ne vous disons pas rien, alors généralement 1981 01:18:48,670 --> 01:18:50,320 supposons que vous avez à vérifier la plupart des choses. 1982 01:18:50,320 --> 01:18:54,772 Comme vous pouvez, juste pour être sûr, vous devrait probablement vérifier hey, est de nulle? 1983 01:18:54,772 --> 01:18:56,230 Alors je ne sais pas ce qu'il faut revenir. 1984 01:18:56,230 --> 01:18:58,814 Mais nous vous dire ce genre de chose. 1985 01:18:58,814 --> 01:18:59,480 0, je ne sais pas. 1986 01:18:59,480 --> 01:19:02,786 >> DAVIN: Et pourquoi voudriez-vous revérifier si s est égal à zéro? 1987 01:19:02,786 --> 01:19:03,660 L'ÉLÈVE: [inaudible]. 1988 01:19:03,660 --> 01:19:04,880 DAVIN: En raison de l'omble étoiles. 1989 01:19:04,880 --> 01:19:05,510 Il est un pointeur. 1990 01:19:05,510 --> 01:19:09,240 Ainsi, un parfaitement acceptable déclaration, je pourrais dire, OK, 1991 01:19:09,240 --> 01:19:11,917 s est égal à zéro, car il pourrait être un pointeur null. 1992 01:19:11,917 --> 01:19:14,250 Donc, lorsque vous avez des pointeurs dans votre chemin dans ce genre, 1993 01:19:14,250 --> 01:19:15,420 vous devriez probablement vérifier. 1994 01:19:15,420 --> 01:19:18,461 Parce que si vous ne cochez pas que, et alors vous puis allez dans votre boucle, 1995 01:19:18,461 --> 01:19:20,100 et vous doing-- scoot bas. 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 Scoot bas. 1998 01:19:22,920 --> 01:19:23,860 >> ROB: Désolé, ça y est. 1999 01:19:23,860 --> 01:19:25,860 >> DAVIN: Et donc, comme si elle est nulle, et puis vous 2000 01:19:25,860 --> 01:19:28,267 faire, quelle erreur allez-vous obtenir? 2001 01:19:28,267 --> 01:19:29,850 ÉTUDIANTS: Vous allez obtenir un ensemble faute. 2002 01:19:29,850 --> 01:19:31,250 DAVIN: Vous allez mettre en la faute, droit, parce que vous êtes 2003 01:19:31,250 --> 01:19:32,616 essayer de l'indice en null. 2004 01:19:32,616 --> 01:19:35,240 Donc, vous allez essayer de l'indice en mémoire que vous ne possédez pas. 2005 01:19:35,240 --> 01:19:39,550 Donc, cela, si cela est nulle, et vous faites cela, vous aurez cycle. 2006 01:19:39,550 --> 01:19:43,656 >> ROB: Je pense également à l'examen en ce qui nous avons posé cette question, nous vous disons 2007 01:19:43,656 --> 01:19:45,655 que vous pouvez simplement supposer il est un nombre positif. 2008 01:19:45,655 --> 01:19:48,270 Parce devrait également atoi à manipuler des nombres négatifs, 2009 01:19:48,270 --> 01:19:49,686 de sorte que vous auriez à cas particulier. 2010 01:19:49,686 --> 01:19:53,080 Hey, est le premier caractère un tableau de bord, dans ce cas, OK, 2011 01:19:53,080 --> 01:19:54,839 maintenant il est un entier négatif. 2012 01:19:54,839 --> 01:19:56,380 Nous allons vous dire ce genre de choses. 2013 01:19:56,380 --> 01:19:58,005 Nous allons vous dire ce que vous devez gérer. 2014 01:19:58,005 --> 01:19:59,310 DAVIN: Oui. 2015 01:19:59,310 --> 01:20:02,530 Donc, je suis sûr que certaines personnes pourraient have-- si vous avez commencé la recherche de vieilles examens, 2016 01:20:02,530 --> 01:20:03,900 vous avez vu sterln. 2017 01:20:03,900 --> 01:20:05,120 Voilà un des plus populaires. 2018 01:20:05,120 --> 01:20:09,790 Et je pense que dans sterln, vous deviez faire cette vérification pour nulle, le retour 2019 01:20:09,790 --> 01:20:10,950 0 ou quelque chose comme ça. 2020 01:20:10,950 --> 01:20:11,940 Comme, il fallait vérifier nulle. 2021 01:20:11,940 --> 01:20:14,230 Et si vous ne l'avez pas, que a été le point de rabais sur le questionnaire. 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 Donc de toute façon, tout le monde ne sentir OK avec atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 Quelqu'un veut-il aller sur les parties encore? 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 ROB: Oh oui, je pense nous vous disons aussi vous 2028 01:20:25,565 --> 01:20:28,565 peut supposer que tout ce que est-- ils sont en fait entrer un certain nombre, 2029 01:20:28,565 --> 01:20:32,821 que vous ne devez pas vous inquiéter au sujet, comme, lettres étant dans la chaîne, donc. 2030 01:20:32,821 --> 01:20:33,320 DAVIN: Ouais. 2031 01:20:33,320 --> 01:20:33,922 Oui? 2032 01:20:33,922 --> 01:20:35,713 L'ÉLÈVE: Pouvez-vous aller sur une durée plus lorsque 2033 01:20:35,713 --> 01:20:37,860 vous utilisez des guillemets doubles et apostrophe? 2034 01:20:37,860 --> 01:20:41,290 >> DAVIN: Bien sûr, si les guillemets doubles, très simplement, est entre guillemets sont des chaînes. 2035 01:20:41,290 --> 01:20:43,370 Donc, si vous doublez citation rien, qui est une chaîne. 2036 01:20:43,370 --> 01:20:48,270 Alors, comme, si je devais cette 0 ici, et je l'ai fait, voilà une chaîne. 2037 01:20:48,270 --> 01:20:50,060 Voilà plus d'un caractère. 2038 01:20:50,060 --> 01:20:54,816 Donc je ne peux pas trouver cette valeur sur mon ASCII graphique, car il est une chaîne, ouais. 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> OK, d'autres questions? 2041 01:20:59,480 --> 01:21:00,405 Oui? 2042 01:21:00,405 --> 01:21:02,345 >> Etudiant: Ainsi vous avez déjà répondu à cela, 2043 01:21:02,345 --> 01:21:05,255 mais comme, quand nous sommes réellement écrit ceci sur le questionnaire, 2044 01:21:05,255 --> 01:21:08,165 voulez-vous que nous écrivions avec barres obliques zéros [inaudible]? 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 DAVIN: Non 2047 01:21:11,540 --> 01:21:13,800 La question était devriez-vous mettre une barre oblique à travers les zéros 2048 01:21:13,800 --> 01:21:14,890 pour indiquer si elles sont des zéros? 2049 01:21:14,890 --> 01:21:15,890 Non, nous allons le découvrir. 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 Oui, merci, ils sont bons. 2052 01:21:19,530 --> 01:21:20,860 OK, rien d'autre? 2053 01:21:20,860 --> 01:21:25,060 Quelqu'un veut to-- donc je pense que nous avons couru un peu plus de temps. 2054 01:21:25,060 --> 01:21:27,305 Voulez-vous voir un autre, ou? 2055 01:21:27,305 --> 01:21:28,096 L'ÉLÈVE: randomInt. 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> DAVIN: randomInt, OK, exactement. 2058 01:21:30,750 --> 01:21:32,975 Alors, faisons randomInt. 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 Je vais le faire ici. 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 Donc randomInt est en fait beaucoup plus simple. 2063 01:21:39,210 --> 01:21:43,578 Je pense atoi est probablement le plus difficile que nous avons demandé dans les années précédentes. 2064 01:21:43,578 --> 01:21:44,453 L'ÉLÈVE: [inaudible]. 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> DAVIN: Quoi? 2067 01:21:47,161 --> 01:21:49,493 ROB: Je vois si elle est un peu de visible à partir ici. 2068 01:21:49,493 --> 01:21:50,040 DAVIN: Est-ce? 2069 01:21:50,040 --> 01:21:52,500 ROB: Je ne pense pas que ce soit going-- je pense il va courir vers la droite. 2070 01:21:52,500 --> 01:21:53,791 DAVIN: OK, donc je vais faire celui-ci. 2071 01:21:53,791 --> 01:21:56,250 Et puis, vous venez de le mettre sur l'écran. 2072 01:21:56,250 --> 01:21:57,150 >> ROB: Très bien. 2073 01:21:57,150 --> 01:21:58,190 >> DAVIN: Vous voulez être mon scribe? 2074 01:21:58,190 --> 01:21:58,600 >> ROB: Ouais. 2075 01:21:58,600 --> 01:21:59,100 >> DAVIN: Nice. 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 OK, je peux effacer ce? 2078 01:22:02,727 --> 01:22:04,188 >> L'ÉLÈVE: Oui. 2079 01:22:04,188 --> 01:22:05,162 >> DAVIN: Voilà si dur. 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (Chant) Vous faites ce que vous faites. 2082 01:22:12,062 --> 01:22:14,454 Et faire ce que vous ne faites pas. 2083 01:22:14,454 --> 01:22:14,954 Bien. 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> OK, si je me souviens bien, sur le quiz le randomInt était comme, 2086 01:22:22,930 --> 01:22:26,190 OK, je vais vous donner deux numéros, comme un a et un b. 2087 01:22:26,190 --> 01:22:30,380 Et je veux que vous me donniez une RandomInt entre ces chiffres. 2088 01:22:30,380 --> 01:22:33,440 Donc randomInt va de prendre deux numbers-- 2089 01:22:33,440 --> 01:22:41,690 si RandomInt-- et il est va retourner un int. 2090 01:22:41,690 --> 01:22:42,930 >> Alors, quelle est la valeur de retour? 2091 01:22:42,930 --> 01:22:44,151 Je viens de vous dire. 2092 01:22:44,151 --> 01:22:44,650 Int, non? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 Comme ça, et puis il est va prendre deux ints. 2095 01:22:49,260 --> 01:22:56,301 Donc, il va falloir int a et b int, comme ça. 2096 01:22:56,301 --> 01:22:58,217 Alors qu'est-ce randomInt est allons faire est que ça va 2097 01:22:58,217 --> 01:23:02,440 à retourner une valeur aléatoire entre ces deux valeurs. 2098 01:23:02,440 --> 01:23:05,140 Donc, ça va être plus grande d'un, à moins de b. 2099 01:23:05,140 --> 01:23:09,020 Donc, je pense que vous pouvez probablement supposer que a est la plus petite des deux valeurs. 2100 01:23:09,020 --> 01:23:12,210 Donc, si nous avons affaire à aléatoire, quelle fonction 2101 01:23:12,210 --> 01:23:14,825 nous avons vu que nous donne des choses au hasard? 2102 01:23:14,825 --> 01:23:15,450 L'ÉLÈVE: drand. 2103 01:23:15,450 --> 01:23:16,506 DAVIN: drand, exactement. 2104 01:23:16,506 --> 01:23:18,630 Donc, vous allez probablement voulez utiliser votre drand. 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 Ainsi, vous pouvez dire int aléatoire, et nous allons il suffit de dire est égal à 0 à l'heure actuelle. 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 Et ils vont nous dire, OK, égaux aléatoires drand 48. 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 Et qu'est-ce que ce retour? 2111 01:23:40,830 --> 01:23:43,742 Qu'est-ce que cette fonction vous donner? 2112 01:23:43,742 --> 01:23:45,610 >> L'ÉLÈVE: Entre 0 et 1. 2113 01:23:45,610 --> 01:23:47,870 >> DAVIN: Oui, entre 0 et 1. 2114 01:23:47,870 --> 01:23:48,890 Donc, il va être-- 2115 01:23:48,890 --> 01:23:51,070 >> ROB: Et ce est-- je pense nous vous dire ceci. 2116 01:23:51,070 --> 01:23:52,670 Comme, vous pouvez utiliser drand 48. 2117 01:23:52,670 --> 01:23:54,350 Vous pouvez le vérifier sur l'examen passé. 2118 01:23:54,350 --> 01:23:56,720 Mais nous aurions probablement vous dire peut utiliser drand 48, qui 2119 01:23:56,720 --> 01:23:58,790 renvoie un flotteur entre 0 et 1. 2120 01:23:58,790 --> 01:24:00,830 >> DAVIN: Oui, oui, je suis sûr à l'examen 2121 01:24:00,830 --> 01:24:03,860 il vous dit probablement vouloir utiliser drand, ouais. 2122 01:24:03,860 --> 01:24:07,041 Donc, il va revenir une valeur comprise entre 0 et 1. 2123 01:24:07,041 --> 01:24:08,790 Et puis ce que vous êtes allez vouloir faire? 2124 01:24:08,790 --> 01:24:16,360 Eh bien, vous voulez multiplier by-- attends, je pense qu'il est comme ça, désolé. 2125 01:24:16,360 --> 01:24:18,018 Je vais le faire. 2126 01:24:18,018 --> 01:24:19,410 Je ne sais pas. 2127 01:24:19,410 --> 01:24:22,240 >> Donc b moins un. 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 Alors pourquoi b moins un? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 Donc, disons que vous redonne drand un OK int--, je vais faire le reste, 2132 01:24:30,490 --> 01:24:33,380 si plus d'une. 2133 01:24:33,380 --> 01:24:36,130 Alors qu'est-ce does-- y est moins un b. 2134 01:24:36,130 --> 01:24:40,670 Donc, disons que vous redonne drand la valeur maximale, il pourrait peut-être 2135 01:24:40,670 --> 01:24:41,410 vous donner. 2136 01:24:41,410 --> 01:24:42,409 Qu'est-ce que ça va être? 2137 01:24:42,409 --> 01:24:43,010 L'ÉLÈVE: 1. 2138 01:24:43,010 --> 01:24:44,430 >> DAVIN: 1, non? 2139 01:24:44,430 --> 01:24:47,880 Donc, si cela est 1, et vous êtes multipliant par b moins un, 2140 01:24:47,880 --> 01:24:50,110 bien, que est que le différence entre moins A. 2141 01:24:50,110 --> 01:24:52,870 Et si vous ajoutez à cela que retour sur un, qui est ce? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 Il est fondamentalement b. 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 Est-ce logique? 2146 01:24:57,310 --> 01:24:57,851 >> L'ÉLÈVE: Oui. 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> DAVIN: Donc, si cela est le maximum valoriser ce pourrait être, 2149 01:25:02,170 --> 01:25:03,175 ça va être 1. 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 Et puis cela est juste la la différence entre les deux. 2152 01:25:06,330 --> 01:25:11,410 Ajouter à un, si cela est va revenir aléatoire. 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 Et dans le cas d'angle qui drand vous redonne 1, 2155 01:25:18,620 --> 01:25:20,970 aléatoire sera simplement être efficacement b. 2156 01:25:20,970 --> 01:25:22,700 Mais qui est le maximum possible. 2157 01:25:22,700 --> 01:25:27,420 Donc, si ça va être inférieure à que, alors disons que sa comme 0,9, 2158 01:25:27,420 --> 01:25:31,080 Alors 0,9 fois moins b un va être moins 2159 01:25:31,080 --> 01:25:33,230 que la différence entre B moins un. 2160 01:25:33,230 --> 01:25:35,830 >> Et puis si vous ajoutez que à un, alors cette valeur est 2161 01:25:35,830 --> 01:25:38,986 va être supérieur à un, parce que vous ajoutez quelque chose sur elle, 2162 01:25:38,986 --> 01:25:40,360 mais ça va être inférieure à b. 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 Donc, vous allez obtenir un hasard nombre, parce que vous vous appelez drand. 2165 01:25:44,420 --> 01:25:48,000 Et que rand, ce nombre aléatoire est va être quelque part entre un 2166 01:25:48,000 --> 01:25:49,342 et b. 2167 01:25:49,342 --> 01:25:50,780 Est-ce logique? 2168 01:25:50,780 --> 01:25:52,990 >> ROB: Juste pour le mettre dans des chiffres concrets, de sorte 2169 01:25:52,990 --> 01:25:55,450 disons que nous voulons choisir un nombre aléatoire compris entre 7 et 10. 2170 01:25:55,450 --> 01:25:56,960 Donc b moins un est notre gamme. 2171 01:25:56,960 --> 01:26:00,150 Donc, il ya une gamme de trois chiffres que nous veulent choisir. 2172 01:26:00,150 --> 01:26:03,290 Et puis en multipliant que, entre 0 et 1 1, 2173 01:26:03,290 --> 01:26:07,430 si cela nous donne alors some-- disons que nous donne 1,5. 2174 01:26:07,430 --> 01:26:10,670 >> Puis 1,5, nous voulons aller de 7 à 10. 2175 01:26:10,670 --> 01:26:14,470 Donc 1,5 + 7 nous apporte nouveau dans notre gamme de 7 à 10. 2176 01:26:14,470 --> 01:26:17,580 Et puis nous ranger à l'intérieur de un nombre entier, de sorte qu'il tronquée vers le bas à 8. 2177 01:26:17,580 --> 01:26:18,790 Et puis nous revenons juste que. 2178 01:26:18,790 --> 01:26:21,310 Donc b moins un est notre gamme. 2179 01:26:21,310 --> 01:26:25,770 une décale vers le haut dans les numéros que nous voulons dans cette fourchette. 2180 01:26:25,770 --> 01:26:30,540 Ainsi, entre 7 et 10, et puis nous peut retourner ce que nous retrouvons avec. 2181 01:26:30,540 --> 01:26:32,684 >> DAVIN: Ouais, bon. 2182 01:26:32,684 --> 01:26:34,470 >> ROB: Je vous remercie. 2183 01:26:34,470 --> 01:26:35,628 >> DAVIN: Ouais, quoi de neuf? 2184 01:26:35,628 --> 01:26:39,746 >> L'ÉLÈVE: Avons-nous courons à tout type de erreurs ASCII quand we're-- si drand est 2185 01:26:39,746 --> 01:26:40,996 retour d'un flotteur [inaudible]. 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ROB: Ainsi, tout comme Rob dit, car aléatoire est pas un int, 2188 01:26:45,360 --> 01:26:47,080 si drand sera un flotteur. 2189 01:26:47,080 --> 01:26:48,470 Il multiplie donc et ensuite. 2190 01:26:48,470 --> 01:26:50,507 Et vous pourriez obtenir une certaine type de numéros de flotteur. 2191 01:26:50,507 --> 01:26:51,840 Et puis ça va tronquer. 2192 01:26:51,840 --> 01:26:52,339 >> L'ÉLÈVE: OK. 2193 01:26:52,339 --> 01:26:53,019 DAVIN: Ouais. 2194 01:26:53,019 --> 01:26:56,060 ROB: Et si le compilateur devait avertir vous sur, comme la perte de précision, 2195 01:26:56,060 --> 01:26:58,986 vient de lancer un int dans là, et puis il est bon. 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 DAVIN: Oui? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> L'ÉLÈVE: aurait-il la même probabilité d'obtenir, 2200 01:27:04,722 --> 01:27:06,156 comme, b ou un [inaudible]? 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ROB: Donc est-- je suis réellement wondering-- est censé randomInt 2203 01:27:10,980 --> 01:27:14,362 à avoir un certain nombre de une à moins de b? 2204 01:27:14,362 --> 01:27:16,820 Comme, si elle est entre 7 et 10, quelles sont les possibilités? 2205 01:27:16,820 --> 01:27:18,454 7, 8 et 9, ou 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 DAVIN: je ne sais plus. 2207 01:27:19,120 --> 01:27:19,880 Sur le problème de set-- 2208 01:27:19,880 --> 01:27:20,570 >> ROB: Je pense qu'il est 7, 8, 9. 2209 01:27:20,570 --> 01:27:22,785 >> DAVIN: Il dit précisément ses inclusive et exclusive de l'un. 2210 01:27:22,785 --> 01:27:23,110 >> ROB: Ouais. 2211 01:27:23,110 --> 01:27:23,670 >> DAVIN: Mais je don't-- je suis pas-- 2212 01:27:23,670 --> 01:27:25,878 >> ROB: Je pense donc ceux-ci est pas inclus, dans ce cas, 2213 01:27:25,878 --> 01:27:28,152 il ya une égalité probabilité de 7, 8, et 9. 2214 01:27:28,152 --> 01:27:29,360 Il n'y a pas de probabilité 10. 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 DAVIN: Oui? 2217 01:27:32,270 --> 01:27:33,395 Etudiant: Je voudrais poser une question. 2218 01:27:33,395 --> 01:27:38,090 Nous voulons définir une fonction renvoie pas une valeur, mais un tableau. 2219 01:27:38,090 --> 01:27:41,020 Alors quelle serait la syntaxe après le retour? 2220 01:27:41,020 --> 01:27:44,604 >> DAVIN: OK, alors vous would-- après le retour? 2221 01:27:44,604 --> 01:27:47,020 Donc, disons que vous aviez déclaré un tableau quelque part là-haut. 2222 01:27:47,020 --> 01:27:49,708 Ensuite, vous voulez bien revenir le nom du tableau. 2223 01:27:49,708 --> 01:27:50,676 >> L'ÉLÈVE: OK, merci. 2224 01:27:50,676 --> 01:27:51,718 Ensuite il suffit de retourner à A- 2225 01:27:51,718 --> 01:27:52,759 DAVIN: Oh, attends, désolé. 2226 01:27:52,759 --> 01:27:54,620 La question était de savoir comment retournez-vous un tableau. 2227 01:27:54,620 --> 01:27:56,170 >> ROB: Bien qu'il ne pouvait pas être un tableau déclaré 2228 01:27:56,170 --> 01:27:57,260 sur la pile ou quelque chose comme ça. 2229 01:27:57,260 --> 01:27:59,510 Il devrait être quelque chose malloced, parce que malloc 2230 01:27:59,510 --> 01:28:01,610 est de savoir comment vous déplacer attribution automatique de la mémoire. 2231 01:28:01,610 --> 01:28:02,109 >> DAVIN: Oui. 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 ROB: Comment obtenez-vous autour de portée locale. 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> DAVIN: Mais vous il suffit de retourner son name-- 2236 01:28:11,550 --> 01:28:17,890 >> L'ÉLÈVE: [inaudible] il est pas un valeur, par exemple, deux nombres, de sorte 2237 01:28:17,890 --> 01:28:18,390 [Inaudible]. 2238 01:28:18,390 --> 01:28:19,590 >> DAVIN: Vous ne pouvez pas revenir multiple. 2239 01:28:19,590 --> 01:28:20,850 Vous ne pouvez pas, comme, return-- 2240 01:28:20,850 --> 01:28:23,630 >> Etudiant: Je parlais de retour un tableau ou quelque chose comme ça. 2241 01:28:23,630 --> 01:28:26,050 >> DAVIN: Ouais, donc la question est puis-je retourner des valeurs multiples. 2242 01:28:26,050 --> 01:28:27,460 Vous ne pouvez pas renvoyer plusieurs valeurs. 2243 01:28:27,460 --> 01:28:30,270 Vous ne pouvez pas, comme, retourner un puis retourner b ou quelque chose comme ça. 2244 01:28:30,270 --> 01:28:32,710 Parce que, après votre retour, vous revenir sur la fonction. 2245 01:28:32,710 --> 01:28:35,790 Et puis la fonction est fait, et comme dit Rob, est sur la pile. 2246 01:28:35,790 --> 01:28:38,260 >> Donc tout ce que la mémoire devient juste retour à l'ordinateur. 2247 01:28:38,260 --> 01:28:40,025 Tout est oublié, essentiellement. 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 Donc, si vous voulez revenir multiple valeurs, vous devez renvoyer un tableau, 2250 01:28:44,430 --> 01:28:45,971 Et la façon dont vous le faites est allouer de. 2251 01:28:45,971 --> 01:28:48,780 Et alors vous retourner x comme ça. 2252 01:28:48,780 --> 01:28:50,280 Fondamentalement, il vous suffit de retourner le nom. 2253 01:28:50,280 --> 01:28:51,620 Et lorsque vous revenez quelque chose comme ça, vous êtes 2254 01:28:51,620 --> 01:28:53,200 pas fait de renvoyer la valeur. 2255 01:28:53,200 --> 01:28:55,430 >> Donc, disons que vous avez enregistré les valeurs dans un tableau. 2256 01:28:55,430 --> 01:28:57,910 Vous n'êtes pas réellement renvoyer ces valeurs. 2257 01:28:57,910 --> 01:29:01,515 Comme, si je revenais un int, je suis vraiment le retour des copies des valeurs. 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 Mais si je devais revenir quelque chose comme ça, 2260 01:29:03,850 --> 01:29:06,450 Je retourne une référence à ces valeurs. 2261 01:29:06,450 --> 01:29:09,090 Donc, je suis de retour, fondamentalement, un adresse de mémoire pour les valeurs. 2262 01:29:09,090 --> 01:29:10,079 Est-ce logique? 2263 01:29:10,079 --> 01:29:10,620 L'ÉLÈVE: Oui. 2264 01:29:10,620 --> 01:29:11,120 DAVIN: Nice. 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 Oui? 2267 01:29:13,410 --> 01:29:15,430 >> L'ÉLÈVE: Lorsque vous êtes utilisant drand ici, 2268 01:29:15,430 --> 01:29:17,660 vous devez mettre srand avant? 2269 01:29:17,660 --> 01:29:20,320 >> DAVIN: Non, non, je ne le pense pas. 2270 01:29:20,320 --> 01:29:23,040 >> ROB: Ouais, si vous avez rien dire sur srand? 2271 01:29:23,040 --> 01:29:26,900 Le défaut de vous dire jamais srand tout se résume à faire srand null. 2272 01:29:26,900 --> 01:29:29,350 Donc drand sur son propre travail de volonté. 2273 01:29:29,350 --> 01:29:33,759 Et il sera automatiquement semences avec l'heure actuelle, est ce qu'il utilise. 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 DAVIN: Oui? 2276 01:29:35,675 --> 01:29:40,950 L'ÉLÈVE: Pensez-vous [inaudible] avec les chiffres? 2277 01:29:40,950 --> 01:29:42,570 DAVIN: Oui, vous le pouvez. 2278 01:29:42,570 --> 01:29:46,770 Etudiant: Ainsi vous pourriez dire, comme, 4 fois 2. 2279 01:29:46,770 --> 01:29:50,280 La chose est, vous ne pouvez pas assumer puis un int est de quatre octets. 2280 01:29:50,280 --> 01:29:51,020 La terre que: 2281 01:29:51,020 --> 01:29:53,830 >> DAVIN: Je veux dire, pour le quiz, vous pouvez. 2282 01:29:53,830 --> 01:29:54,830 [Rires] 2283 01:29:54,830 --> 01:29:55,780 >> ROB: Mm, non. 2284 01:29:55,780 --> 01:29:56,780 DAVIN: Oui, oui, vous le pouvez. 2285 01:29:56,780 --> 01:30:00,197 Si on vous demande comment un grand int est, vous ne pouvez pas être, comme, quatre ou huit. 2286 01:30:00,197 --> 01:30:02,030 ROB: Oh, si la question est précisément, 2287 01:30:02,030 --> 01:30:04,857 comme, si il ya un problème de codage, vous devriez dire la taille de int. 2288 01:30:04,857 --> 01:30:06,690 Si elle est une table, ou il dit combien d'octets, 2289 01:30:06,690 --> 01:30:08,808 vous ne devriez pas remplir la taille des entiers. 2290 01:30:08,808 --> 01:30:11,278 >> ÉTUDIANTS: [Rires] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> DAVIN: Bon, alors pourquoi est taille de int important ici? 2293 01:30:20,580 --> 01:30:23,085 Donc, comme, si nous allons à 32 bits processeur ou quelque chose comme ça, 2294 01:30:23,085 --> 01:30:24,300 alors ça va être quatre octets. 2295 01:30:24,300 --> 01:30:26,342 Mais certains des nouveaux choses, il pourrait être quoi? 2296 01:30:26,342 --> 01:30:27,383 Il pourrait être huit, non? 2297 01:30:27,383 --> 01:30:30,550 Donc this-- si vous venez de coder en dur quatre, puis sur certaines machines, cela va fonctionner. 2298 01:30:30,550 --> 01:30:32,180 Certaines machines, il ne fonctionnera pas. 2299 01:30:32,180 --> 01:30:35,270 Mais si sur le questionnaire nous sommes comme la taille est un int? 2300 01:30:35,270 --> 01:30:35,770 Mettez quatre. 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ROB: Droit. 2303 01:30:39,210 --> 01:30:39,790 DAVIN: Ouais? 2304 01:30:39,790 --> 01:30:43,192 Etudiant: Ainsi parce que nous déclarant [Inaudible] à l'intérieur d'une fonction, 2305 01:30:43,192 --> 01:30:45,622 devrions-nous mettre 3 à l'intérieur de cette fonction? 2306 01:30:45,622 --> 01:30:46,907 Ou pouvons-nous utiliser à l'extérieur? 2307 01:30:46,907 --> 01:30:48,740 DAVIN: vous pouvez l'utiliser en dehors de cette fonction. 2308 01:30:48,740 --> 01:30:49,890 Alors il demande gratuitement. 2309 01:30:49,890 --> 01:30:51,700 >> L'ÉLÈVE: Oubliez où [inaudible]. 2310 01:30:51,700 --> 01:30:54,720 >> ROB: Oh, la libre ne happen-- pas cela fait partie de la magie de malloc 2311 01:30:54,720 --> 01:30:57,220 est que vous n'êtes pas limitée à portée locale. 2312 01:30:57,220 --> 01:31:00,700 Vous avez le plein contrôle sur combien de temps vos variables vivent. 2313 01:31:00,700 --> 01:31:05,380 Nous appelons donc malloc ici, il pourrait être une fonction à part entière. 2314 01:31:05,380 --> 01:31:08,670 Il pourrait être de 10 heures plus tard que nous appelons enfin libre. 2315 01:31:08,670 --> 01:31:11,764 >> DAVIN: Ainsi, par exemple, comme, un couple semaines à partir de maintenant quand vous enfin 2316 01:31:11,764 --> 01:31:13,680 faire votre dictionnaire orthographique psets, vous allez 2317 01:31:13,680 --> 01:31:16,410 d'avoir une fonction qui crée tonnes de noeuds. 2318 01:31:16,410 --> 01:31:18,630 Donc, vous allouer de tonnes de nœuds dans cette fonction. 2319 01:31:18,630 --> 01:31:20,670 Et puis plus tard dans un fonction distincte, vous êtes 2320 01:31:20,670 --> 01:31:22,440 allez vouloir libérer tous ces nœuds. 2321 01:31:22,440 --> 01:31:25,740 Ainsi, vous pouvez littéralement passer à libérer un pointeur, donc une adresse mémoire 2322 01:31:25,740 --> 01:31:26,684 à ce que vous malloced. 2323 01:31:26,684 --> 01:31:27,600 Et ce sera bien. 2324 01:31:27,600 --> 01:31:29,725 Vous n'êtes pas obligé de libérer, comme, dans la même fonction. 2325 01:31:29,725 --> 01:31:30,449 Oui? 2326 01:31:30,449 --> 01:31:36,197 >> Etudiant: Ainsi un malloc variable [inaudible] à l'extérieur? 2327 01:31:36,197 --> 01:31:37,384 Est-ce ce que vous dites? 2328 01:31:37,384 --> 01:31:38,300 DAVIN: Attendez, dire cela? 2329 01:31:38,300 --> 01:31:38,800 Désolé. 2330 01:31:38,800 --> 01:31:42,300 >> ÉTUDIANT: Si une variable de malloc peut être libre partout dans le code, 2331 01:31:42,300 --> 01:31:44,800 alors qu'ils peuvent être consultés n'importe où dans le code? 2332 01:31:44,800 --> 01:31:45,800 Pouvez-vous garder les locaux? 2333 01:31:45,800 --> 01:31:47,880 >> DAVIN: Oh, elle a demandé, comme, la variable like-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> ROB: Donc, vous avez encore besoin de avoir une sorte de référence 2336 01:31:55,510 --> 01:31:57,220 pour le bloc de l'malloc de mémoire. 2337 01:31:57,220 --> 01:31:58,540 Donc, ici, nous sommes de retour x. 2338 01:31:58,540 --> 01:31:59,040 L'ÉLÈVE: Oh. 2339 01:31:59,040 --> 01:32:01,920 ROB: Si nous ne revenons x ici, et cela était juste vide, 2340 01:32:01,920 --> 01:32:04,550 alors nous aurions pas accès à le pointeur qui a été malloced, 2341 01:32:04,550 --> 01:32:05,920 et il est la mémoire fuite. 2342 01:32:05,920 --> 01:32:06,690 >> L'ÉLÈVE: OK. 2343 01:32:06,690 --> 01:32:10,010 >> DAVIN: Donc, comme, disons que vous avoir cette, comme, ici. 2344 01:32:10,010 --> 01:32:10,510 ROB: Non 2345 01:32:10,510 --> 01:32:13,430 DAVIN: Dans ma fonction principale, je ne peux pas il suffit d'appeler cette x et être, comme, OK, 2346 01:32:13,430 --> 01:32:14,645 dans cette fonction, je l'ai fait. 2347 01:32:14,645 --> 01:32:14,960 >> ROB: Droit. 2348 01:32:14,960 --> 01:32:17,790 >> DAVIN: Je vais appeler x dans, comme, principale ou quelque chose comme ça. 2349 01:32:17,790 --> 01:32:18,540 Vous ne pouvez pas faire cela. 2350 01:32:18,540 --> 01:32:19,600 Vous allez retourner quelque chose. 2351 01:32:19,600 --> 01:32:21,000 Mais qu'est-ce que vous allez revenir? 2352 01:32:21,000 --> 01:32:22,130 Vous allez retourner une adresse mémoire. 2353 01:32:22,130 --> 01:32:25,130 Et parce que vous retournez un mémoire adresse, qui peut être consulté ailleurs. 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 D'autres questions? 2356 01:32:28,255 --> 01:32:28,755 Oui? 2357 01:32:28,755 --> 01:32:31,213 >> ÉTUDIANTS: La fonction ci-dessus étant chèque de [inaudible]? 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> DAVIN: Pourquoi dois-je pas besoin de faire cela? 2360 01:32:35,005 --> 01:32:35,880 L'ÉLÈVE: [inaudible]. 2361 01:32:35,880 --> 01:32:37,755 DAVIN: Parce que vous êtes pas allouer de quoi que ce soit. 2362 01:32:37,755 --> 01:32:39,640 Donc, il est pas-- ouais, il est pas comme une chaîne s. 2363 01:32:39,640 --> 01:32:41,160 Il est un pointeur quelque part. 2364 01:32:41,160 --> 01:32:42,951 Ce ne sont que des valeurs. 2365 01:32:42,951 --> 01:32:43,450 L'ÉLÈVE: OK. 2366 01:32:43,450 --> 01:32:43,949 DAVIN: Ouais. 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 Rien d'autre? 2369 01:32:48,470 --> 01:32:48,970 ROB: Ouais? 2370 01:32:48,970 --> 01:32:50,386 Etudiant: Mais lorsque vous [inaudible]? 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> ROB: Ainsi, afin de libérer le mémoire, nous dirions ici. 2373 01:32:58,690 --> 01:33:01,350 Donc x est notre pointeur à le bloc de mémoire. 2374 01:33:01,350 --> 01:33:02,845 Nous libérons ce pointeur. 2375 01:33:02,845 --> 01:33:04,470 Et nous ne serions pas nécessairement le faire ici. 2376 01:33:04,470 --> 01:33:05,390 Nous pouvons le faire n'importe où. 2377 01:33:05,390 --> 01:33:10,400 Mais vous appelez seulement gratuitement sur quelque chose que malloc retourne. 2378 01:33:10,400 --> 01:33:12,940 Donc, malloc, ici, de retour ce qui est stocké dans x. 2379 01:33:12,940 --> 01:33:14,802 Nous pouvons donc appeler gratuitement sur x. 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 Les dernières questions? 2382 01:33:20,556 --> 01:33:21,701 >> DAVIN: Les dernières questions? 2383 01:33:21,701 --> 01:33:22,200 Ouais? 2384 01:33:22,200 --> 01:33:25,152 >> L'ÉLÈVE: Désolé, pouvez-vous expliquer à nouveau pourquoi vous libérer là-dedans? 2385 01:33:25,152 --> 01:33:26,630 Pourquoi [inaudible]? 2386 01:33:26,630 --> 01:33:27,774 >> DAVIN: Pour ici? 2387 01:33:27,774 --> 01:33:29,109 >> L'ÉLÈVE: Oui, comme tout de suite après. 2388 01:33:29,109 --> 01:33:30,900 DAVIN: Vous avez probablement ne veulent pas d'un libre ici. 2389 01:33:30,900 --> 01:33:31,630 ROB: Vous feriez probablement pas. 2390 01:33:31,630 --> 01:33:33,060 DAVIN: Oui, que cela ne permettrait pas. 2391 01:33:33,060 --> 01:33:35,220 Ce serait, comme, créer mémoire, faire des choses pour elle, 2392 01:33:35,220 --> 01:33:37,390 et puis tout de suite oublier, oui. 2393 01:33:37,390 --> 01:33:39,850 >> ROB: Mais nous pourrions faire, comme, ici pour une raison. 2394 01:33:39,850 --> 01:33:43,902 Nous pourrions dire int étoiles y est égal à matrice de retour. 2395 01:33:43,902 --> 01:33:47,900 Faire des trucs avec y, peut-être imprimer le contenu. 2396 01:33:47,900 --> 01:33:49,350 Et puis, finalement, nous avons terminé. 2397 01:33:49,350 --> 01:33:50,626 Nous pouvons libérer y. 2398 01:33:50,626 --> 01:33:51,501 L'ÉLÈVE: [inaudible]. 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 DAVIN: Dois-je faire défiler vers le bas? 2401 01:33:59,005 --> 01:34:00,445 Merci. 2402 01:34:00,445 --> 01:34:00,945 ROB: Nice. 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> DAVIN: OK, ça y est. 2405 01:34:03,646 --> 01:34:04,520 ROB: Très bien, très bien. 2406 01:34:04,520 --> 01:34:05,070 Bonne chance. 2407 01:34:05,070 --> 01:34:06,800 >> DAVIN: Si vous avez des questions, écrivez-nous. 2408 01:34:06,800 --> 01:34:08,670 Bonne chance. 2409 01:34:08,670 --> 01:34:10,283