1 00:00:00,000 --> 00:00:01,110 >> [음악 연주] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 데이비드 J. 마란 : 좋습니다. 4 00:00:11,650 --> 00:00:15,610 이것은 CS50이며,이 넷째 주의 끝에있다. 5 00:00:15,610 --> 00:00:19,420 그리고 항목 중 하나 오늘 디지털 포렌식의 즉, 6 00:00:19,420 --> 00:00:20,989 정보를 복구하는 기술. 7 00:00:20,989 --> 00:00:22,780 그리고 실제로, 비록 당신이 중간에있어 8 00:00:22,780 --> 00:00:25,070 지금 평화의 세에서 및 브레이크 아웃, 다음 주, 9 00:00:25,070 --> 00:00:27,880 초점이 켜집니다 정확하게이 도메인. 10 00:00:27,880 --> 00:00:30,686 >> 멋진 작업 그래서 한 I 적 했다, 다시 대학원에 있었다 11 00:00:30,686 --> 00:00:33,560 나는 지방 근무 때 미들 섹스 카운티 지방 검사의 12 00:00:33,560 --> 00:00:34,950 사무실, 일 법의학 작동합니다. 13 00:00:34,950 --> 00:00:37,450 그래서 본질적으로, 매사 추세 츠 주 경찰, 계기, 14 00:00:37,450 --> 00:00:40,100 경우에 작업 할 때 것 하드 드라이브 같은 것들에 가져 15 00:00:40,100 --> 00:00:42,185 플로피 디스크와 메모리 카드 등이있다. 16 00:00:42,185 --> 00:00:44,060 그리고 그들은 그들에게 손 것 저와 제 멘토로, 17 00:00:44,060 --> 00:00:48,070 우리의 목표는 증거를 발견했다, 이 매체에 어떤를가 있다면. 18 00:00:48,070 --> 00:00:50,700 지금, 당신은 볼 수도 흘긋 법의학의이 세상의 19 00:00:50,700 --> 00:00:53,000 미디어, TV와 영화에서. 20 00:00:53,000 --> 00:00:55,730 그러나 작업은 내가 있고, daresay 그 세계, 21 00:00:55,730 --> 00:00:57,550 당신이 그것을 볼 것 같은 꽤하지 않습니다. 22 00:00:57,550 --> 00:01:00,794 이제 살펴 보자 무엇을 당신은 아마 보았다. 23 00:01:00,794 --> 00:01:01,460 [동영상 재생] 24 00:01:01,460 --> 00:01:02,930 - 좋아. 25 00:01:02,930 --> 00:01:05,380 지금, 당신에서 좋은 모습을 얻을 수 있습니다. 26 00:01:05,380 --> 00:01:06,850 >> [음악 연주] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> 그것을 기다려 봐. 29 00:01:12,932 --> 00:01:13,657 그 다시 실행합니다. 30 00:01:13,657 --> 00:01:14,733 >> 잠깐만. 31 00:01:14,733 --> 00:01:15,233 오른쪽으로 이동합니다. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 저기. 34 00:01:16,870 --> 00:01:17,369 그 동결. 35 00:01:17,369 --> 00:01:17,930 - 전체 화면. 36 00:01:17,930 --> 00:01:18,376 >> - 좋아. 37 00:01:18,376 --> 00:01:18,875 그 동결. 38 00:01:18,875 --> 00:01:20,160 당신은 그것에 것까지 -Tighten? 39 00:01:20,160 --> 00:01:22,126 >> 그에에 - 벡터 뒤쪽 휠에 의해 남자. 40 00:01:22,126 --> 00:01:24,435 >> 여기이 자리에 -Zoom. 41 00:01:24,435 --> 00:01:28,580 >> 적합한 장비의 섹스, 이미지를 확대하고 날카롭게 할 수 있습니다. 42 00:01:28,580 --> 00:01:29,330 >> 그게 뭐지? 43 00:01:29,330 --> 00:01:30,780 >> - 그것은 향상 프로그램입니다. 44 00:01:30,780 --> 00:01:32,170 >> 그 최대 명확한 당신은 모를 때? 45 00:01:32,170 --> 00:01:33,070 >> - 모르겠어요. 46 00:01:33,070 --> 00:01:34,150 현실을 제고하자. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance 제 A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 나는 세부 사항을 개선, 그리고 ... 50 00:01:38,562 --> 00:01:40,020 - 난 강화 충분히 있다고 생각. 51 00:01:40,020 --> 00:01:40,976 내 화면에 놓습니다. 52 00:01:40,976 --> 00:01:42,559 >> - 난 그녀의 눈에서 반사를 강화. 53 00:01:42,559 --> 00:01:44,322 버리자를 통해이 작업을 실행하는 것 비디오 향상. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar,이을 향상시킬 수 있습니다? 55 00:01:45,210 --> 00:01:45,710 >> 잠시만 요. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> 이 반사 작업을 받았는데. 58 00:01:49,458 --> 00:01:50,402 >> 저기의 누군가의 반사. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 남자의 얼굴에 반사되어 있어요. 61 00:01:52,870 --> 00:01:53,694 >> 년 - 반사! 62 00:01:53,694 --> 00:01:54,610 반사되어 있어요. 63 00:01:54,610 --> 00:01:55,880 거울에 -Zoom. 64 00:01:55,880 --> 00:01:57,860 당신은 반사를 볼 수 있습니다. 65 00:01:57,860 --> 00:01:59,630 >> 여기에서 이미지를 향상시킬까요? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 당신은 그것을 향상시킬까요? 68 00:02:01,210 --> 00:02:02,190 당신은 그것을 향상시킬까요? 69 00:02:02,190 --> 00:02:03,066 우리는이 향상까요? 70 00:02:03,066 --> 00:02:03,898 당신은 그것을 향상시킬까요? 71 00:02:03,898 --> 00:02:04,740 초에 기다려 봐. 72 00:02:04,740 --> 00:02:05,281 나는 향상됩니다. 73 00:02:05,281 --> 00:02:06,470 문에 -Zoom. 74 00:02:06,470 --> 00:02:06,970 10 배속. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 에서 비켜. 77 00:02:08,509 --> 00:02:09,340 - 더. 78 00:02:09,340 --> 00:02:10,094 잠깐, 중지합니다. 79 00:02:10,094 --> 00:02:10,750 그만. 80 00:02:10,750 --> 00:02:11,250 그것을 -PAUSE. 81 00:02:11,250 --> 00:02:13,542 우리에게 75도 - 회전 수직 주위하시기 바랍니다. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> 그만. 84 00:02:16,127 --> 00:02:19,330 부분으로 돌아 가기 문에 대해 다시. 85 00:02:19,330 --> 00:02:21,420 >> 비트 맵 수있는 이미지 보정기를 샀지? 86 00:02:21,420 --> 00:02:24,420 >> 우리는 프라 딥 싱을 사용 드리죠 방법은 창으로 볼 수 있습니다. 87 00:02:24,420 --> 00:02:25,902 >> 년 - 소프트웨어는 예술의 상태입니다. 88 00:02:25,902 --> 00:02:26,866 >> 년 - 고유 값이 꺼져 있습니다. 89 00:02:26,866 --> 00:02:29,758 >> 오른쪽의 섹스 algorithms--의 조합 90 00:02:29,758 --> 00:02:32,168 >> - 그는의 촬영 조명 다음 단계로 알고리즘, 91 00:02:32,168 --> 00:02:34,110 나는에 사용할 수 있습니다 이 사진을 향상시킬 수 있습니다. 92 00:02:34,110 --> 00:02:36,840 >> 에 고정시켜 및 z 축을 확대. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 향상시킬 수 있습니다. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 멈춰 및 향상시킬 수 있습니다. 97 00:02:40,070 --> 00:02:43,420 [END VIDEO 재생] 98 00:02:43,420 --> 00:02:45,830 데이비드 J. 마란 : 그래서 사람들은 아르 모든 단어는,하지만 그들은하지 않았다 99 00:02:45,830 --> 00:02:47,870 제대로 문장에 사용됩니다. 100 00:02:47,870 --> 00:02:52,370 그리고 실제로 미래의 어떤 시간, , 당신은 다른 사람이 단어를 말 듣고하십시오 101 00:02:52,370 --> 00:02:54,250 조금 웃음을 "강화". 102 00:02:54,250 --> 00:02:57,190 당신이 향상 할 때 때문에, 예를 들어,이 문제가 발생하는 것입니다. 103 00:02:57,190 --> 00:02:58,580 >> 그래서 여기에 멋진 사진입니다. 104 00:02:58,580 --> 00:02:59,720 이 CS50 자신의 Daven이다. 105 00:02:59,720 --> 00:03:03,740 그리고 우리가 원한다고 가정 그의 눈에서 반짝임에 초점, 106 00:03:03,740 --> 00:03:05,870 또는 반사 였습니다 나쁜 사람 107 00:03:05,870 --> 00:03:07,820 감시 카메라에 의해 캡쳐. 108 00:03:07,820 --> 00:03:10,330 이 때 발생하는 것입니다 당신은 이미지를 확대하는 109 00:03:10,330 --> 00:03:14,060 단지 한정된 수있다 연관된 비트. 110 00:03:14,060 --> 00:03:15,420 >> 즉, 당신이 얻을 것이다 것입니다. 111 00:03:15,420 --> 00:03:19,190 그리고 실제로, Daven의 눈 아마 여섯 픽셀이지만 네 112 00:03:19,190 --> 00:03:22,110 그게 정확히 무엇을 구성 이 희미하게 빛나는했다. 113 00:03:22,110 --> 00:03:25,890 그래서 문제 4 개 세트는 궁극적으로해야합니다 당신은 특히,이 세계를 탐험 114 00:03:25,890 --> 00:03:28,090 일의 성격 상 우리는 파일 I / O, 어디 전화 115 00:03:28,090 --> 00:03:31,000 I / O는 단지 멋진 방법입니다 입력과 출력을 말. 116 00:03:31,000 --> 00:03:34,280 >> 그래서 지금까지, 모든 상호 작용 우리는 컴퓨터와 함께 했어 117 00:03:34,280 --> 00:03:36,770 로 크게왔다 당신의 키보드와 스크린, 118 00:03:36,770 --> 00:03:40,770 하지만 하드 디스크 순전히, 또는 사람을 넘어 파일로 저장하면 119 00:03:40,770 --> 00:03:41,620 자신을 작성합니다. 120 00:03:41,620 --> 00:03:44,570 프로그램은 지금까지 가질 하지가 생성 및 저장되어 121 00:03:44,570 --> 00:03:46,270 자신의 파일을 업데이트. 122 00:03:46,270 --> 00:03:47,150 >> 음, 파일은 무엇입니까? 123 00:03:47,150 --> 00:03:48,105 음, JPEG 같은. 124 00:03:48,105 --> 00:03:50,520 이것은 당신이 수있는 이미지입니다 이 페이스 북에 업로드, 125 00:03:50,520 --> 00:03:51,690 또는 웹 어디서든 참조하십시오. 126 00:03:51,690 --> 00:03:54,460 사실, 그 사진 우리 단지 Daven의 톱 JPEG이었다. 127 00:03:54,460 --> 00:03:57,570 그리고 무슨 일이 재미있다 JPEG 파일과 같은 파일에 대한 128 00:03:57,570 --> 00:04:02,170 들이 식별 될 수 있다는 것이다 일반적으로, 특정 비트 패턴에 의해. 129 00:04:02,170 --> 00:04:05,200 >> 즉, 그것이 무엇이다 GIF에서 JPEG를 구별 130 00:04:05,200 --> 00:04:08,109 워드에서 PING에서 Excel 파일에서 문서? 131 00:04:08,109 --> 00:04:09,900 음, 그냥 다르다 비트 패턴. 132 00:04:09,900 --> 00:04:12,820 그리고 그 다른 패턴은 일반적으로 그 파일의 시작. 133 00:04:12,820 --> 00:04:18,200 >> 컴퓨터가 말씀을 열 때 그 그래서 문서 또는 컴퓨터가 JPEG을 열 때, 134 00:04:18,200 --> 00:04:20,940 그것은 전형적으로 보이는 파일의 처음 몇 비트. 135 00:04:20,940 --> 00:04:24,059 그리고이 패턴을 인식하는 경우, 그것은 오,이 이미지입니다 말했다. 136 00:04:24,059 --> 00:04:25,850 나에게 표시하자 같은 그래픽 유저. 137 00:04:25,850 --> 00:04:27,870 또는, 오,이 워드 문서처럼 보인다. 138 00:04:27,870 --> 00:04:30,480 나 에세이로 사용자에게 보여 드리겠습니다. 139 00:04:30,480 --> 00:04:33,020 >> 예를 들어 그래서, JPEG 파일, 그것은 아르 밝혀 140 00:04:33,020 --> 00:04:35,460 매우 정교한 후드 아래에. 141 00:04:35,460 --> 00:04:40,140 그러나 대부분의 모든 제 3 바이트 JPEG는이 세 개의 숫자로 시작합니다. 142 00:04:40,140 --> 00:04:44,680 그래서 바이트 0, 1, 및 두이다 대부분의 모든 JPEG, 255의 경우, 수 143 00:04:44,680 --> 00:04:46,675 216 다음 번호 255. 144 00:04:46,675 --> 00:04:48,990 >> 그리고 당신은 할 수 있습니다 무엇을 다음 주에 일을 시작합니다 145 00:04:48,990 --> 00:04:52,920 실제로 아래에 파고있다 JPEG 파일과 같은 파일의 후드 146 00:04:52,920 --> 00:04:57,210 비트 맵 파일 등을들 수 있으며,보고 무슨 일이 항상 오래가있었습니다 147 00:04:57,210 --> 00:04:58,650 당신은 컴퓨터를 사용하고있다. 148 00:04:58,650 --> 00:05:01,860 >> 그러나 일반적으로이없는거야 이 같은 소수처럼 작성합니다. 149 00:05:01,860 --> 00:05:04,620 컴퓨터 과학자들은하지 않습니다 진수로 이야기하는 경향이있다. 150 00:05:04,620 --> 00:05:06,139 그들은 정말 이진 말을하지 않습니다. 151 00:05:06,139 --> 00:05:07,930 일반적으로 할 때 우리가 원하는 숫자를 표현하기 위해, 152 00:05:07,930 --> 00:05:10,710 우리는 실제로 16 진수 사용 이는 당신이 기억하고있을 것 153 00:05:10,710 --> 00:05:13,027 문제 설정, 말에서 도전 하나 154 00:05:13,027 --> 00:05:14,610 당신은 다른 시스템에 대해 생각합니다. 155 00:05:14,610 --> 00:05:17,170 >> 우리는 물론, 익숙 구를 통해 진수, 0 인. 156 00:05:17,170 --> 00:05:18,215 우리는 진에 대해 이야기했다. 157 00:05:18,215 --> 00:05:20,710 그리고 우리는 정말이 없습니다 많은 여기에 사용하기 158 00:05:20,710 --> 00:05:22,470 아웃에 컴퓨터를 이용합니다 때문입니다. 159 00:05:22,470 --> 00:05:24,900 그러나 프로그래머는 매우 것 종종, 항상 그런 것은 아니지만, 160 00:05:24,900 --> 00:05:29,360 그냥 의미하는 16 진수를 사용 당신이 당신의 알파벳 16 글자가 161 00:05:29,360 --> 00:05:31,330 으로 두 개 또는 10에 반대했다. 162 00:05:31,330 --> 00:05:34,530 >> 그렇다면 이상으로 센다 16 진수로 구 이상? 163 00:05:34,530 --> 00:05:41,120 만약 이동 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 단지 규칙에 따라 C, D, E, F, 나. 164 00:05:41,120 --> 00:05:43,540 그러나 중요한 것은 각 점이다 이 중 하나의 상징이다. 165 00:05:43,540 --> 00:05:44,340 더 열이 없습니다. 166 00:05:44,340 --> 00:05:48,400 각 때문에 더 11, 그 자체가 없습니다 당신의 자리로, 단지 소수에 좋아 167 00:05:48,400 --> 00:05:51,940 그냥 진에 추천하고, 그냥해야 규칙에 따라 하나의 문자 수. 168 00:05:51,940 --> 00:05:55,280 >> 우리가 가지고있는 알파벳이되도록 진수에 대한 우리의 처분에. 169 00:05:55,280 --> 00:05:58,600 그래서 JPEG는 경우처럼 무엇을 보는가 그 첫번째 세를 기록했다 170 00:05:58,600 --> 00:06:01,980 , 소수로하지 바이트 만 예를 들면, 16 진법 (hexadecimal)으로? 171 00:06:01,980 --> 00:06:03,640 왜 진수는 그 유용도 모두입니까? 172 00:06:03,640 --> 00:06:05,290 >> 음, 예를 잠깐 살펴. 173 00:06:05,290 --> 00:06:09,030 나는 비트를 쓰는 그래서 만약 그 이러한 소수점 숫자들을 나타냅니다 174 00:06:09,030 --> 00:06:12,450 이 녹슬 수 있습니다 이제 다시 몇 주에서, 175 00:06:12,450 --> 00:06:14,820 왼쪽 하나는하지만, 오른쪽에 하나는 매우 쉽습니다. 176 00:06:14,820 --> 00:06:17,990 (255)는 가장 큰 숫자 우리이었다 8 비트와 함께 나타낼 수 있습니다. 177 00:06:17,990 --> 00:06:18,820 그것은 모든 사람이었다. 178 00:06:18,820 --> 00:06:21,320 그래서 약간입니다 만 한 흥미로운 가운데 하나입니다. 179 00:06:21,320 --> 00:06:24,700 그리고 당신은 가지에서 할 경우 수학, 당신은 참으로 그 추론한다 180 00:06:24,700 --> 00:06:27,949 하나의 패턴 제로는 216을 나타냅니다. 181 00:06:27,949 --> 00:06:30,240 그래서 그냥에 대한 규정하자 이제 이러한 올바른지. 182 00:06:30,240 --> 00:06:31,730 그런데 왜이 재미있다? 183 00:06:31,730 --> 00:06:33,970 >> 그런데, 바이트는 물론, 8 비트이다. 184 00:06:33,970 --> 00:06:38,980 그리고 그것은 당신이 생각하는 경우 밝혀 4 비트의 두 덩어리로 바이트, 185 00:06:38,980 --> 00:06:39,500 이있다. 186 00:06:39,500 --> 00:06:41,000 나 그냥 일부 공간을 추가 할 수 있습니다. 187 00:06:41,000 --> 00:06:42,550 그래서 전, 후. 188 00:06:42,550 --> 00:06:46,520 전 그냥 공백을 추가 한 여기 시각화의 위해서. 189 00:06:46,520 --> 00:06:51,840 어떻게 우리가 지금에 나타낼 수, 말 16 진수 각 비트 쿼드, 190 00:06:51,840 --> 00:06:52,880 4 비트의 각 세트? 191 00:06:52,880 --> 00:06:56,420 >> 예를 들면, 좌측에 따라서 지금, 우리는 이진 1111이있다. 192 00:06:56,420 --> 00:07:00,420 진수로 그 숫자는 무엇입니까, 당신은 수학을한다면? 193 00:07:00,420 --> 00:07:03,780 당신은 사람의 장소가, 조로 장소, 발로 장소 및 형상을 장소. 194 00:07:03,780 --> 00:07:04,341 >> 대상 : 15. 195 00:07:04,341 --> 00:07:05,340 데이비드 J. 마란 : 그것은 15입니다. 196 00:07:05,340 --> 00:07:08,340 그래서 우리는 팔 플러스 넷을 할 경우 더하기 둘 더하기 하나는, 우리는 15를 얻는다. 197 00:07:08,340 --> 00:07:11,790 그래서 아래 15를 기록 할 수 1111, 그러나 여기에서 요점 198 00:07:11,790 --> 00:07:13,190 16 진수, 진수 없습니다. 199 00:07:13,190 --> 00:07:17,310 그래서 그 대신 적어 15, 1-5, 나는 16 진수에 해당를 작성하는거야 200 00:07:17,310 --> 00:07:22,311 당신이 가지고있는 경우는, 다시 생각하면되는 F 0 - 어떤 15가 될 것입니다? 201 00:07:22,311 --> 00:07:22,810 청중 : 바. 202 00:07:22,810 --> 00:07:24,434 데이비드 J. 마란 : 그래서 그것의 F를 밝혀졌습니다. 203 00:07:24,434 --> 00:07:29,140 그리고 당신이 말하는 그 정도는 알 작업 할 수 있습니다, 이 10 인 경우도, 다음 확인을, F는 15입니다. 204 00:07:29,140 --> 00:07:33,250 그래서 참으로, 우리는 다시 수 F f를 같은 번호의 동일한 집합입니다. 205 00:07:33,250 --> 00:07:35,750 그리고 우리는 수학의 비트를 할 경우, 우리는이 D 있다고 추론 할 수 있습니다. 206 00:07:35,750 --> 00:07:38,650 여덟, 아주 쉽게 우리 때문에 석 장소에서 일을해야합니다. 207 00:07:38,650 --> 00:07:40,620 그리고, 우리는 F F의 몇 가지 더있다. 208 00:07:40,620 --> 00:07:44,669 >> 그래서 인간 관례 적으로하는 경향이 그들이 사용하는 경우 16 진수 그들은 단지입니다 209 00:07:44,669 --> 00:07:47,710 더 간결이 조금 쓰기 그 공백의 대부분을 제거. 210 00:07:47,710 --> 00:07:50,890 그리고 그냥 슈퍼 명확하게 이 16 진수임을 독자, 211 00:07:50,890 --> 00:07:54,670 중 간단한 규칙 인간은 당신이 제로를 기록 212 00:07:54,670 --> 00:07:58,000 다른 의미가 없습니다 X, 시각적 식별자보다 213 00:07:58,000 --> 00:07:59,590 여기에 16 진수가 제공됩니다. 214 00:07:59,590 --> 00:08:04,210 >> 그리고, 당신은 f를 두 자리 숫자를 넣어 이 경우에 F, D 후, 다음 F F. 215 00:08:04,210 --> 00:08:06,700 그래서 긴 이야기를 짧은 진수는 경향이있다 216 00:08:06,700 --> 00:08:11,990 유용하는 각 때문에 숫자, F 0 - 완벽 라인 217 00:08:11,990 --> 00:08:13,880 4 비트의 패턴 닫. 218 00:08:13,880 --> 00:08:18,080 >> 두 개의 16 진수가 생기면, 제로 또 다시 F를 통해, 219 00:08:18,080 --> 00:08:20,256 그 완벽을 제공합니다 8 비트 또는 한 바이트. 220 00:08:20,256 --> 00:08:22,380 이 경향 이유야 통상적으로 유용합니다. 221 00:08:22,380 --> 00:08:24,990 아무런 지적이 없다 정말 이상 내용, 222 00:08:24,990 --> 00:08:27,010 실제 유틸리티 이외의. 223 00:08:27,010 --> 00:08:29,310 >> 지금 JPEG 파일은뿐만 아니라 아르 그래픽 파일 포맷. 224 00:08:29,310 --> 00:08:33,230 당신은이 있다는 것을 기억 있습니다 세계에서 같은 파일, 225 00:08:33,230 --> 00:08:34,830 적어도 몇 년에서. 226 00:08:34,830 --> 00:08:37,580 >> 그래서이 사실이었다 윈도우 XP에 설치 227 00:08:37,580 --> 00:08:39,960 전 세계 수백만 대의 PC에. 228 00:08:39,960 --> 00:08:43,000 그리고이 비트 맵 파일, BMP이었다. 229 00:08:43,000 --> 00:08:47,690 그리고 비트 맵 파일로 당신 옆에 볼 수 있습니다 주, 단지 도트의 패턴을 의미 230 00:08:47,690 --> 00:08:51,710 그들이이라 불리는로 픽셀, 정말, 비트에 매핑합니다. 231 00:08:51,710 --> 00:08:55,160 >> 그래서 비록, 흥미, 이 파일 형식, BMP에 대해서, 인 232 00:08:55,160 --> 00:08:58,590 이 후드 아래, 그것을 단지 세 바이트보다 더 많은 것이있다 233 00:08:58,590 --> 00:09:01,020 그 때문에, 헤더를 구성 처음 몇 바이트를 구사합니다. 234 00:09:01,020 --> 00:09:03,330 사실은 조금 보인다 언뜻 보면 복잡. 235 00:09:03,330 --> 00:09:04,704 그리고 당신은 P 설정이 표시됩니다. 236 00:09:04,704 --> 00:09:06,810 그리고 무언가를 얻기 이 특정 밖으로 지금 237 00:09:06,810 --> 00:09:10,720 그냥 사실로, 그렇게 중요하지 않다 그 각 비트 맵의​​ 시작 238 00:09:10,720 --> 00:09:13,823 파일, 그래픽 형식으로, 숫자의 전체 무리가있다. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> 이제 마이크로 소프트, 이 형식의 저자, 241 00:09:16,720 --> 00:09:18,820 그 호출 경향 일하지 정수 및 문자 242 00:09:18,820 --> 00:09:22,259 그리고 수레하지만 단어와 D 단어와 걷고 바이트. 243 00:09:22,259 --> 00:09:23,800 그래서 그들은 단지 다른 데이터 유형이있어. 244 00:09:23,800 --> 00:09:25,170 그들은 다른 이름이야 같은 일을합니다. 245 00:09:25,170 --> 00:09:26,740 하지만 당신은 P 4 개 세트에이를 볼 수 있습니다. 246 00:09:26,740 --> 00:09:31,450 >> 하지만이 말을 아니라 그 인간의 경우 에 대한 몇 가지 .BMP 파일을 두 번 클릭 그의 247 00:09:31,450 --> 00:09:35,015 혹은 그녀의 하드 드라이브 및 창이 열립니다 그 사람이나 그 여자 그 이미지를 보여주는까지, 248 00:09:35,015 --> 00:09:38,500 그 운영하기 때문에 무슨 일이 있었 시스템은 아마도뿐만 아니라 발견 249 00:09:38,500 --> 00:09:41,460 .BMP 파일 확장자 파일 이름, 250 00:09:41,460 --> 00:09:45,010 뿐만 아니라, 사실은 거기에 몇 가지 비트 패턴 협약 251 00:09:45,010 --> 00:09:47,490 처음에 그 비트 맵 파일의. 252 00:09:47,490 --> 00:09:50,270 >> 하지만 그건 지금에 집중하자 이러한 복잡한 파일 253 00:09:50,270 --> 00:09:52,120 대신 이렇게 뭔가. 254 00:09:52,120 --> 00:09:55,190 나는 gedit에서 여기에 가정 그냥 시작을 255 00:09:55,190 --> 00:09:57,070 아주 간단 프로그램의. 256 00:09:57,070 --> 00:09:58,860 나는 약간의 상단을 포함하고 있어요. 257 00:09:58,860 --> 00:10:02,120 지금 내가 가진 # 포함 "structs.h"하지만, 나는 순간에 다시 그에게 올 것이다. 258 00:10:02,120 --> 00:10:03,974 그러나 지금은 유용합니다. 259 00:10:03,974 --> 00:10:05,890 그래서이 프로그램입니다 그 구현 것 260 00:10:05,890 --> 00:10:07,335 등록 기관의 데이터베이스 등을들 수있다. 261 00:10:07,335 --> 00:10:09,710 그래서 학생들의 데이터베이스, 세계의 모든 학생 262 00:10:09,710 --> 00:10:13,190 아마 이름과 집과​​이 다른 것들, 그러나 우리는 간단하게합니다. 263 00:10:13,190 --> 00:10:15,140 모든 학생의 이름과 집이있다. 264 00:10:15,140 --> 00:10:17,700 >> 나는를 쓰고 싶다한다면 그 목적은 인생에서 프로그램 265 00:10:17,700 --> 00:10:19,860 단지에서 반복되었다 세까지의 제로, 266 00:10:19,860 --> 00:10:22,070 세 학생이 있다면 하버드 대학. 267 00:10:22,070 --> 00:10:25,350 그리고 난 그냥있는 getString을 사용하고 싶지, 각 학생의 이름과 집, 268 00:10:25,350 --> 00:10:26,600 다음 그냥 그를 인쇄 할 수 있습니다. 269 00:10:26,600 --> 00:10:28,630 >> 이 종류의 주처럼 하나, 둘째 주 물건 지금 270 00:10:28,630 --> 00:10:30,810 난 그냥 위해 원하는 위치에 루프 또는 그런 일. 271 00:10:30,810 --> 00:10:34,500 그리고, getString에 몇을 호출 할 시간은 다음 몇 번 f를 인쇄 할 수 있습니다. 272 00:10:34,500 --> 00:10:37,340 그래서, 비록이 작업을 수행하는 방법, 때 이름과 집 모두 273 00:10:37,340 --> 00:10:39,070 각 학생 참여? 274 00:10:39,070 --> 00:10:42,830 >> 그래서 내 첫번째 본능 수도 이런 식으로 뭔가를 할 수. 275 00:10:42,830 --> 00:10:49,620 내가 먼저 잘 줘, 말할 수도, , 이름이라는 문자열 배열을 말한다. 276 00:10:49,620 --> 00:10:51,530 그리고 하드 코드 셋 여기를 원하지 않는다. 277 00:10:51,530 --> 00:10:53,064 내가 거기에 넣고 싶어? 278 00:10:53,064 --> 00:10:55,730 그건 그냥이기 때문에, 학생들은 그래서 상단 선언 상수 279 00:10:55,730 --> 00:10:57,860 나는 하드 코딩 할 필요가 없습니다 둬 여러 장소에서 세. 280 00:10:57,860 --> 00:11:00,859 이 방법은, 내가, 그것을 한 장소를 변경할 수 있습니다 그리고 사방 변화에 영향을 미친다. 281 00:11:00,859 --> 00:11:04,470 그리고, 내가 할 수 있습니다 문자열은 학생을 수용. 282 00:11:04,470 --> 00:11:10,250 >> 그리고 지금, 내가 좋아하는 일을 할 수 있습니다 내가 학생을 <;에 (I = 0 int 전은 + +. 283 00:11:10,250 --> 00:11:14,390 그래서 빠른 입력 해요,하지만이입니다 지금은 아마 익숙한 구문. 284 00:11:14,390 --> 00:11:17,030 >> 그리고 지금이 최근 있었다. 285 00:11:17,030 --> 00:11:22,890 나는 i 번째에 넣어하려는 경우 학생의 이름, 나는 이렇게 생각한다. 286 00:11:22,890 --> 00:11:26,480 그리고, 이름이 아닌 하지만 집은 내가 브라켓. 287 00:11:26,480 --> 00:11:29,930 나는이,있는 getString을 수행하고하자 나를 되돌아 가서이 줄을 수정합니다. 288 00:11:29,930 --> 00:11:30,430 동의? 289 00:11:30,430 --> 00:11:31,200 동의? 290 00:11:31,200 --> 00:11:32,366 그것은 매우 사용하기 쉬운이 아니다. 291 00:11:32,366 --> 00:11:33,890 나는 무엇을해야 하는지를 사용자를 말하지 않았다. 292 00:11:33,890 --> 00:11:36,520 >> 하지만 지금 나는 경우도 나중에하자 싶어 293 00:11:36,520 --> 00:11:40,060 말하자면, 이러한 것들을 인쇄 병원을 나온 그래서 TODO 이상이 필요합니다. 294 00:11:40,060 --> 00:11:42,330 좀 더 함께 할거야 틀림없이이 될 것 ... 295 00:11:42,330 --> 00:11:45,970 의 올바른 구현 이름과 주택, 셋을 얻는 296 00:11:45,970 --> 00:11:48,870 사용자로부터 각각 그들 전체. 297 00:11:48,870 --> 00:11:51,280 >> 그러나 이것은 매우 좋은 디자인, 오른쪽 아닌가요? 298 00:11:51,280 --> 00:11:55,220 어떤 학생이 아니라 이름이있는 경우 그리고 집뿐만 아니라, ID 번호, 299 00:11:55,220 --> 00:11:57,770 및 전화 번호, 및 이메일 주소 300 00:11:57,770 --> 00:12:00,280 어쩌면 홈 페이지 및 아마 트위터 핸들, 301 00:12:00,280 --> 00:12:03,730 및 기타 세부 사항의 수 학생 또는 사람과 연관 302 00:12:03,730 --> 00:12:04,610 더 일반적으로. 303 00:12:04,610 --> 00:12:07,720 우리는 추가 시작하는 방법 이 프로그램에 기능? 304 00:12:07,720 --> 00:12:14,080 >> 글쎄, 난하는데 가장 간단한 방법 같은 느낌 같은 일을 가정 해 보자하는, 305 00:12:14,080 --> 00:12:16,490 IDS의 학생을 int로. 306 00:12:16,490 --> 00:12:18,380 그래서 나는 거기에 모든 ID를 넣을 수 있습니다. 307 00:12:18,380 --> 00:12:22,240 그리고, 무엇인가 전화 번호 등 308 00:12:22,240 --> 00:12:24,400 나는 방법을 모르겠어요 아직 것을 나타냅니다. 309 00:12:24,400 --> 00:12:30,280 그래서 앞서 단지 호출 가자 이 학생을, twitters하는 310 00:12:30,280 --> 00:12:33,550 조금 이상한,하지만 ...이다 및 필드 무리보다. 311 00:12:33,550 --> 00:12:36,360 >> 나는 효과적으로에 시작했습니다 복사 및 붙여 넣기하십시오. 312 00:12:36,360 --> 00:12:39,416 그리고이 꽤 증가 할 것입니다 꽤 빨리 다루기 힘든, 오른쪽? 313 00:12:39,416 --> 00:12:42,290 거기에 있다면 좋지 않을까요 세계의 데이터 구조는 공지 314 00:12:42,290 --> 00:12:45,600 int가 아닌 나 문자열,하지만 뭔가로 높은 수준의 추상화, 그래서 315 00:12:45,600 --> 00:12:47,570 학생으로 알려져하니? 316 00:12:47,570 --> 00:12:50,220 C는 내장 함께 제공되지 않은 학생들을위한 기능 317 00:12:50,220 --> 00:12:52,260 하지만 그러한주고 싶어 경우 어떻게? 318 00:12:52,260 --> 00:12:55,640 >> 글쎄, 내가 갈거야 밝혀 , structs.h 여기라는 파일을 엽니 다 319 00:12:55,640 --> 00:12:57,090 당신은 정확하게 작업을 수행 할 수 있습니다. 320 00:12:57,090 --> 00:12:58,290 그리고 우리가 지금이 일을 시작하는 것입니다. 321 00:12:58,290 --> 00:13:01,490 그리고 P 3 설정의 후드 아래, 당신은 이미 지금이 일을했습니다. 322 00:13:01,490 --> 00:13:05,920 g의 RECT 같은 건 없다 또는 프로그래밍 언어 C의 g 타원형 323 00:13:05,920 --> 00:13:10,570 >> 스탠포드에서 사람들은 그 구현 여기서이 방법을 사용하여 데이터 타입, 324 00:13:10,570 --> 00:13:13,900 자신의 새로운 데이터를 선언 새로운 유형의 키워드를 사용 325 00:13:13,900 --> 00:13:16,744 라는 구조체 및 다른 하나라는 형식 정의. 326 00:13:16,744 --> 00:13:19,660 그리고 실제로, 비록 구문 재료는 조금 다르게 보입니다 327 00:13:19,660 --> 00:13:23,550 우리는에, 전에 본 적이 원칙적으로, 그것은 매우 간단합니다. 328 00:13:23,550 --> 00:13:25,297 >> 이것은 단지 "유형을 정의"을 의미합니다. 329 00:13:25,297 --> 00:13:27,255 즉이 될 것 구조 및 구조 330 00:13:27,255 --> 00:13:29,400 단지 용기처럼 여러 것들에 대한. 331 00:13:29,400 --> 00:13:31,780 그리고 그 구조는 것입니다 이름라는 문자열을 가지고, 332 00:13:31,780 --> 00:13:33,210 그리고 문자열은 집이라고. 333 00:13:33,210 --> 00:13:37,520 그리고 그냥 편의를 위해 전화를하자, 이 모든 데이터 구조 학생. 334 00:13:37,520 --> 00:13:40,320 >> 그래서 순간 당신은에 도착 세미콜론, 당신은 지금이 335 00:13:40,320 --> 00:13:43,280 자신의 데이터를 생성 종류라​​는 학생 336 00:13:43,280 --> 00:13:46,420 즉 지금 INT 함께 서 플로트 및 문자, 문자열, 337 00:13:46,420 --> 00:13:50,270 와 g의 RECT 및 g 타원형, 그리고 임의의 숫자 다른 것들의 사람들이 발명했다. 338 00:13:50,270 --> 00:13:53,340 >> 따라서이에 대한 유용한 무엇 지금 돌아 가면 것입니다 339 00:13:53,340 --> 00:13:57,430 공을 구조체이 완료됩니다 내가 쓴 구현 340 00:13:57,430 --> 00:14:02,080 여기에 사전에 모든 것을 알 수 피할 수없는 어지러움의 341 00:14:02,080 --> 00:14:05,490 I가 추가로 발생 시작하고 있었다 전화 번호 및 twitters 모든 342 00:14:05,490 --> 00:14:07,370 이러한 다른 것들 학생의 정의, 343 00:14:07,370 --> 00:14:11,810 지금은 간결 싸서있어 학생들의 한 배열로. 344 00:14:11,810 --> 00:14:15,500 >> 그리고 그 학생의 각 지금 그 안에 여러 가지가 있습니다. 345 00:14:15,500 --> 00:14:16,930 있도록하는 것은 하나의 질문을 남긴다. 346 00:14:16,930 --> 00:14:19,700 어떻게 이름에서 얻을 수 있습니까, 그리고 집, ID, 347 00:14:19,700 --> 00:14:21,640 그리고 어떤 다른입니다 학생의 내부? 348 00:14:21,640 --> 00:14:22,930 슈퍼 간단한뿐만. 349 00:14:22,930 --> 00:14:25,730 새로운 구문하지만 간단한 아이디어. 350 00:14:25,730 --> 00:14:29,239 >> 배열에 당신은 단순히 인덱스, 우리는 지난 주이 그랬던 것처럼. 351 00:14:29,239 --> 00:14:31,030 그리고 무슨 일이 분명하다 구문의 새로운 조각? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 그냥., 의미 "내부 이동 구조와 필드는 호출받을 354 00:14:35,880 --> 00:14:39,030 이름은, 집 불리는 필드를 얻을 학생이라는 필드를 얻을. " 355 00:14:39,030 --> 00:14:41,940 >> 그래서 P 3 설정, 당신은이 있다면 아직도 그 작업, 356 00:14:41,940 --> 00:14:44,020 아직도 대부분의 사람들 당신과 같은 것을 실현된다 357 00:14:44,020 --> 00:14:46,130 같은 것들을 사용하여 시작 g의의 구형 및 g 타원 358 00:14:46,130 --> 00:14:50,201 다른 것들에 보이지 않는 주 0, 1, 2에서 온 359 00:14:50,201 --> 00:14:52,950 즉 스탠포드 때문입니다 실현 새로운 데이터 유형을 선언했다. 360 00:14:52,950 --> 00:14:56,160 >> 그리고 사실, 즉 정확히 무엇을 우리는거야 P 4 개 세트에,뿐만 아니라, 수행 할 때 361 00:14:56,160 --> 00:14:59,880 우리는 일을 처리하기 시작 이미지, 비트 맵, 그리고 더욱. 362 00:14:59,880 --> 00:15:02,882 그래서 그냥 맛보기와이야 올 무엇인지에 대한 정신 모델입니다. 363 00:15:02,882 --> 00:15:04,590 지금, 나는 미루 약간의 아침. 364 00:15:04,590 --> 00:15:09,560 내가 무엇을보고 가지 궁금 마이크로 소프트 벽지 실제로 365 00:15:09,560 --> 00:15:10,310 오늘처럼 보인다. 366 00:15:10,310 --> 00:15:15,200 그리고 그것은 2006 년에 사람을 밝혀 실제로 거의 정확하게 갔다 367 00:15:15,200 --> 00:15:19,210 같은 자리는 실제로 촬영하기 어떻게 이러한 일처럼 보인다. 368 00:15:19,210 --> 00:15:21,380 이 필드는 이제 조금 자란입니다. 369 00:15:21,380 --> 00:15:24,850 >> 그래서 이미지의 지금 말하고, 여기서 Daven을 다시 가져 보자 370 00:15:24,850 --> 00:15:26,890 화면 니콜라스에, 단지 당신을 생각 나게 371 00:15:26,890 --> 00:15:30,540 당신은 점심 식사를 위해 우리와 함께하고 싶은 경우 우리 보통의 URL이 금요일, 머리 372 00:15:30,540 --> 00:15:31,440 여기. 373 00:15:31,440 --> 00:15:33,530 >> 어디 우리는 월요일에 떨어져 떠 났죠? 374 00:15:33,530 --> 00:15:35,140 우리는 바로이 문제를 도입? 375 00:15:35,140 --> 00:15:37,610 이것은 겉으로는 정확했다 스왑의 구현, 376 00:15:37,610 --> 00:15:40,460 이에는 두 개의 정수를 복용 하나는 B라는 하나라는 377 00:15:40,460 --> 00:15:44,130 로라 여기에 그랬던 것처럼, 그들을 교환 우유와 물을 무대에, 378 00:15:44,130 --> 00:15:46,820 를 사용하여 임시 변수 또는 빈 컵, 379 00:15:46,820 --> 00:15:50,540 우리는과에서의 b 넣을 수 있도록 엉망진창으로하지 않고 나. 380 00:15:50,540 --> 00:15:51,560 우리는 변수를 사용했다. 381 00:15:51,560 --> 00:15:52,870 그것은 온도라고. 382 00:15:52,870 --> 00:15:55,520 >> 그러나 근본적인 무엇이었다 월요일에이 코드 문제? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 여기에서 문제는 무엇인가? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 그래. 387 00:16:00,605 --> 00:16:01,970 >> 청중 : 그것은 더 많은 공간을 차지합니다. 388 00:16:01,970 --> 00:16:04,719 >> 데이비드 J. 마란 : 자세한 차지 공간, I 변수를 사용하고 있기 때문에, 389 00:16:04,719 --> 00:16:05,400 그 괜찮습니다. 390 00:16:05,400 --> 00:16:07,300 그건 사실이지만, 난 그 확인을 말할 것. 391 00:16:07,300 --> 00:16:10,030 그것은 그랜드에서 32 비트입니다 사물의 체계, 그래서하지 큰 문제. 392 00:16:10,030 --> 00:16:10,655 다른 생각? 393 00:16:10,655 --> 00:16:12,572 청중 : 그것은 단지 스왑 로컬 변수. 394 00:16:12,572 --> 00:16:13,571 데이비드 J. 마란 : 그렇지. 395 00:16:13,571 --> 00:16:15,090 그것은 단지 로컬 변수를 교환합니다. 396 00:16:15,090 --> 00:16:18,173 언제 당신은 function--를 호출하기 때문에 나는 아넨 버그에서 용지함을했을 때 397 00:16:18,173 --> 00:16:19,840 마지막으로, 당신은 바닥에 주요 있습니다. 398 00:16:19,840 --> 00:16:23,560 즉시 호출 함수를 호출로 스왑, 스왑은 X와 Y를 얻을하지 않습니다, 399 00:16:23,560 --> 00:16:24,400 원래 값. 400 00:16:24,400 --> 00:16:26,392 무엇 우리가 주장 않았다 스왑 GET합니까? 401 00:16:26,392 --> 00:16:27,100 청중 : 복사합니다. 402 00:16:27,100 --> 00:16:28,090 데이비드 J. 마란 : 그 사본 그래서. 403 00:16:28,090 --> 00:16:31,120 그래서 당신이 경우, 하나 둘 도착 마지막에서 예를 리콜, 404 00:16:31,120 --> 00:16:34,730 하지만 한 두 사본 그 성공적으로 교체된다. 405 00:16:34,730 --> 00:16:38,550 그러나 불행하게도 결국, 이러한 값은 여전히​​ 동일합니다. 406 00:16:38,550 --> 00:16:41,880 그래서 우리는 이것을 볼 수있는 우리의 새 친구, 희망 GDB, 407 00:16:41,880 --> 00:16:45,180 당신이나 TF들과 칼슘의가 있다고 다음으로 당신을 안내하고. 408 00:16:45,180 --> 00:16:51,210 >> 그래서 더 스왑 리콜하자 라니 보지 않는다 이 같은이 항아리 모양을 엽니 다. 409 00:16:51,210 --> 00:16:54,160 우리는 두 가지로, 하나의 Y를 X를 초기화. 410 00:16:54,160 --> 00:16:55,620 인쇄 F의 한 무리가 있었다. 411 00:16:55,620 --> 00:16:58,080 그러나, 키 호출 여기에, 스왑이었다 412 00:16:58,080 --> 00:17:00,260 정확하게 코드 우리입니다 잠시 전 보았다. 413 00:17:00,260 --> 00:17:03,180 어떤 처음에 정확 눈에 있지만, 기능적으로, 414 00:17:03,180 --> 00:17:06,800 이 프로그램 때문에 작동하지 않습니다 이 영구적으로 X와 Y를 교환하지 않습니다. 415 00:17:06,800 --> 00:17:10,190 >> 그래서, 빠른 따뜻한의이를 보자 여기 GDB, ./noswap 최대. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 압도적 인 정보의 무리가 지금 필자가 제어 L로 없애 것이다. 418 00:17:15,200 --> 00:17:17,516 그리고 지금, 나는 갈거야 가서 실행합니다. 419 00:17:17,516 --> 00:17:19,349 그리고 불행하게도, 그 그 유용하지 않았다. 420 00:17:19,349 --> 00:17:22,355 그것은이 내부 프로그램을 실행 프로그램은 GDB 디버거를 호출 421 00:17:22,355 --> 00:17:23,730 그러나 그것은 나를 찌를 수 있도록하지 않았다. 422 00:17:23,730 --> 00:17:26,229 >> 그래서 실제로 일시 중지 할 수있는 방법 이 프로그램 안에 실행? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 그래서 휴식. 425 00:17:28,329 --> 00:17:32,340 그리고 나는 어떤에 깨질 수 있습니다 행 번호 번, 10, 15. 426 00:17:32,340 --> 00:17:35,530 그러나 나는 또한 상징적으로 손상 될 수 있습니다 휴식 주를 말하면서. 427 00:17:35,530 --> 00:17:38,980 그리고 휴식을 설정할 것 점을 분명히 메인 라인 16에서. 428 00:17:38,980 --> 00:17:40,050 어디 선 16? 429 00:17:40,050 --> 00:17:42,960 의 코드까지 가자 및 noswap까지 이동합니다. 430 00:17:42,960 --> 00:17:46,930 그리고 실제로, 라인 (16)은 첫 번째 프로그램. 431 00:17:46,930 --> 00:17:52,130 >> 그래서 지금, 내가 가서 입력하면 이 시간을 실행 입력이 일시 중지되었습니다. 432 00:17:52,130 --> 00:17:53,080 그럼 살펴볼 수 있습니다. 433 00:17:53,080 --> 00:17:55,716 왜 X 제로가 x-- 인쇄? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 그리고 달러 기호를 무시합니다. 436 00:17:57,830 --> 00:17:59,725 즉, 애호가를위한 단지 프로그램의 사용. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 왜 순간에 X 제로인가? 439 00:18:03,140 --> 00:18:03,640 그래. 440 00:18:03,640 --> 00:18:07,061 >> 청중 : 그것은 바로 전에 일시 중지 라인 (16), 실제로 라인 16. 441 00:18:07,061 --> 00:18:08,060 데이비드 J. 마란 : 그렇지. 442 00:18:08,060 --> 00:18:11,630 GDB 기본적으로 일시 중지했다 단지 라인 (16) 전에 실행. 443 00:18:11,630 --> 00:18:14,820 그래서이 실행되지 않은 어떤 알 수없는 값입니다 X를 의미한다. 444 00:18:14,820 --> 00:18:17,150 그리고 우리는 그것의 운이있어 제로와 같은 깨끗한 뭔가. 445 00:18:17,150 --> 00:18:20,310 그래서 지금은 다음에 입력하면, 지금은 16를 실행. 446 00:18:20,310 --> 00:18:22,000 내가 17을 실행하는 것이 기다리고있어. 447 00:18:22,000 --> 00:18:23,400 내가 앞서 인쇄 X 가자. 448 00:18:23,400 --> 00:18:24,094 그것은 하나입니다. 449 00:18:24,094 --> 00:18:25,260 내가 앞서 인쇄 Y 가자. 450 00:18:25,260 --> 00:18:26,176 나는 지금 무엇을 볼 것인가? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> 청중 : [들리지] 453 00:18:28,560 --> 00:18:29,165 >> 데이비드 J. 마란 : 약간 크게. 454 00:18:29,165 --> 00:18:30,040 >> 청중 : [들리지] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 데이비드 J. 마란 : 그렇진 합의. 457 00:18:32,120 --> 00:18:34,760 그래서 그래, 우리는 약간의 쓰레기 값을 참조하십시오. 458 00:18:34,760 --> 00:18:37,862 이제, Y​​가 134,514,064입니다. 459 00:18:37,862 --> 00:18:39,320 음, 그냥 쓰레기 값입니다. 460 00:18:39,320 --> 00:18:41,350 내 프로그램은 RAM을 사용합니다 다른 목적을 위해. 461 00:18:41,350 --> 00:18:42,350 다른 기능이있다. 462 00:18:42,350 --> 00:18:44,040 다른 사람들은 내 컴퓨터의 내부를 썼다. 463 00:18:44,040 --> 00:18:46,789 그래서 이러한 비트가 사용되어왔다 다른 값, 그리고 내가 무엇을보고 있어요 464 00:18:46,789 --> 00:18:49,470 일부의 잔재입니다 해당 메모리의 사용 전에. 465 00:18:49,470 --> 00:18:53,350 >> 그래서 더 큰 문제가 있기 때문에 빨리 내가 옆에 입력 한 후 Y를 인쇄로, 466 00:18:53,350 --> 00:18:55,640 그것은으로 초기화있어 내가 원하는 값입니다. 467 00:18:55,640 --> 00:18:57,400 그래서 지금의 조금 더 빨리 진행 할 수 있습니다. 468 00:18:57,400 --> 00:18:58,540 다음에 대한 N. 469 00:18:58,540 --> 00:18:59,570 다시 한 번 해 보자. 470 00:18:59,570 --> 00:19:00,530 다시 한 번 해 보자. 471 00:19:00,530 --> 00:19:02,404 하지만 치고 싶어하지 않는 여기에 있기 때문에 나는 경우 472 00:19:02,404 --> 00:19:05,110 내부에 무슨 일이 일어나고 있는지보고 싶어 스왑의 명령은 무엇입니까? 473 00:19:05,110 --> 00:19:05,520 >> 청중 : 단계. 474 00:19:05,520 --> 00:19:06,436 >> 데이비드 J. 마란 : 단계. 475 00:19:06,436 --> 00:19:09,800 그래서이 나를 단계 오히려보다 위에 기능. 476 00:19:09,800 --> 00:19:12,270 그리고 지금은 좀 애매하다 정직하게, 그러나 이것은 단지입니다 477 00:19:12,270 --> 00:19:14,581 지금은 33 행에있어 말해. 478 00:19:14,581 --> 00:19:15,580 그리고 다시 한 번이 작업을 수행 할 수 있습니다. 479 00:19:15,580 --> 00:19:16,080 인쇄 온도. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 쓰레기도, 음성이 때, 하지만 그건 그냥 여전히 쓰레기 값입니다. 482 00:19:20,170 --> 00:19:22,810 그럼 다음, 인쇄 온도를 할 수 있습니다. 483 00:19:22,810 --> 00:19:27,130 그것은, 1로 초기화하는 것 일명 x의 값이었다. 484 00:19:27,130 --> 00:19:29,110 >> 자, 여기서 우리는과에서 오는 x를? 485 00:19:29,110 --> 00:19:32,510 음, 우리는 주에 주목 이 값 x와 y를했다. 486 00:19:32,510 --> 00:19:34,740 우리는 다음과 같이 그들을 스왑 통과했다. 487 00:19:34,740 --> 00:19:37,010 X는 쉼표 y를 먼저했다. 488 00:19:37,010 --> 00:19:40,020 그리고, 스왑 그들에게 X와 Y를 호출 할 수 있습니다. 489 00:19:40,020 --> 00:19:42,630 그러나 명확성을 위해, 이건 B와 이들을 호출. 490 00:19:42,630 --> 00:19:45,970 그러나 A와 B는 이제 될 것 아르 각각 X 및 Y, 사본. 491 00:19:45,970 --> 00:19:50,660 >> 나는, 온도 다시 GDB로 이동한다면 이제 하나이며, 지금은 하나입니다. 492 00:19:50,660 --> 00:19:56,130 지금 다음에 무엇을하고하지만 인쇄를 , 이미 이상 이동되었습니다. 493 00:19:56,130 --> 00:20:00,030 우유는 이전에 주입 된 오렌지 주스의 유리, 또는 그 반대의 경우도 마찬가지입니다. 494 00:20:00,030 --> 00:20:04,750 >> 그리고 지금 다음 다시 수행하고있는 경우 내가 전성 검사로 인쇄하는 경우, 495 00:20:04,750 --> 00:20:07,687 여전히 두이지만, B는 이제 하나입니다. 496 00:20:07,687 --> 00:20:08,770 솔직히, 아직있다. 497 00:20:08,770 --> 00:20:10,670 나는 무엇 온도 상관 없어. 498 00:20:10,670 --> 00:20:16,850 그러나 바로 지금 입력 할 때,의 말을하자 지금은 말에있어, 돌아가 계속 499 00:20:16,850 --> 00:20:17,480 프로그램을 실행합니다. 500 00:20:17,480 --> 00:20:20,730 그리고 불행하게도, X는 여전히 하나의 Y는 여전히이있다. 501 00:20:20,730 --> 00:20:22,272 >> 그래서이 GDB의 유틸리티는 무엇 이었습니까? 502 00:20:22,272 --> 00:20:23,980 그것은 나를 해결 도움이되지 않았다 문제 라기보다는, 503 00:20:23,980 --> 00:20:26,265 하지만 잘하면 도와 실현함으로써 이해 504 00:20:26,265 --> 00:20:30,000 그 그래, 내 논리는 권리이지만, 내 코드는 궁극적으로 필요하지 않습니다 505 00:20:30,000 --> 00:20:31,450 영구적 인 영향. 506 00:20:31,450 --> 00:20:34,570 그래서 우리가있어 문제입니다 이제 오늘 해결하는 것. 507 00:20:34,570 --> 00:20:37,870 >> 그러나 이제이의 방법으로 거기에 도착 할 수 있습니다. 508 00:20:37,870 --> 00:20:39,230 문자열은 거짓말이다. 509 00:20:39,230 --> 00:20:41,860 그것은 역시없는 데이터 형식 그 그건 C.에 존재 510 00:20:41,860 --> 00:20:44,750 일부의 동의어이었다 뭔가 다른 시간, 511 00:20:44,750 --> 00:20:47,300 우리는 다음과 같은 것을 공개 할 수 있습니다. 512 00:20:47,300 --> 00:20:53,282 >> 내가 가서 열어 보자 프로그램은 비교 - 영했다. 513 00:20:53,282 --> 00:20:56,240 그리고이 일을 입력하기보다는, 우리는 코드를 도보로 시작합니다 514 00:20:56,240 --> 00:20:58,040 이미 쓴, 그러나 그것은 단지 몇 라인이다. 515 00:20:58,040 --> 00:20:59,570 그래서 이것은 비교 - 영됩니다. 516 00:20:59,570 --> 00:21:02,380 그리고 제일 먼저 내가하고 있어요 한 줄의 텍스트를 받고있다. 517 00:21:02,380 --> 00:21:05,610 >> 하지만 난 무엇을 알 처음 하. 518 00:21:05,610 --> 00:21:07,910 무슨 일이 명확 라인 (21)에 대한 다른가요? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 사실, 분을 기다립니다. 521 00:21:11,402 --> 00:21:12,110 이 사본이 있습니다. 522 00:21:12,110 --> 00:21:13,568 그것도 오른쪽 프로그램이 아닙니다. 523 00:21:13,568 --> 00:21:14,780 좋아, 스포일러 경고. 524 00:21:14,780 --> 00:21:16,890 좋아, 그래서 신경 쓰지 않았다. 525 00:21:16,890 --> 00:21:18,520 어쩌면 미래의 질문에 대한 대답입니다. 526 00:21:18,520 --> 00:21:21,450 >> 여기에-0을 비교하고 난입니다 한 줄의 텍스트를 얻을에 대한 정보가 포함되어 있습니다. 527 00:21:21,450 --> 00:21:22,435 프로그램의 훨씬 간단. 528 00:21:22,435 --> 00:21:23,560 그래서이 간단합니다. 529 00:21:23,560 --> 00:21:28,070 이것은 첫째 주, 둘째 주 물건처럼 순간. 문자열의 = getString에. 530 00:21:28,070 --> 00:21:29,700 자, 여기로 다시 말한다. 531 00:21:29,700 --> 00:21:31,830 문자열 t = getString에. 532 00:21:31,830 --> 00:21:35,300 이에 그리고, 마지막으로 프로그램, 그 이름이 시사하는 바와 같이, 533 00:21:35,300 --> 00:21:37,090 나는 그들을 비교하려고거야된다. 534 00:21:37,090 --> 00:21:40,709 >> 그래서의 경우, 첫 번째 문자열, =의 t, 다음 난에 해당 535 00:21:40,709 --> 00:21:42,250 당신이 같은 일을 입력 말을하려고. 536 00:21:42,250 --> 00:21:44,291 그렇지, 내가 말할거야 당신은 다른 일을 입력합니다. 537 00:21:44,291 --> 00:21:45,880 그래서 컴파일하고이 프로그램을 실행 할 수 있습니다. 538 00:21:45,880 --> 00:21:48,481 그래서 영을 비교합니다. 539 00:21:48,481 --> 00:21:48,980 좋아 보인다. 540 00:21:48,980 --> 00:21:50,490 컴파일 오류가 없습니다. 541 00:21:50,490 --> 00:21:52,386 >> 나 지금 앞서 가자 및 ./compare-0을 입력합니다. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 내가 가서 뭔가를 가정 해 봅시다 : Daven 뭔가 : 롭. 544 00:21:59,220 --> 00:22:00,450 그리고 나는 다른 일을 입력합니다. 545 00:22:00,450 --> 00:22:01,250 지금까지 너무 좋아. 546 00:22:01,250 --> 00:22:02,680 프로그램은 올바른 것 같다. 547 00:22:02,680 --> 00:22:03,880 >> 그러나 다시 한 번 실행 할 수 있습니다. 548 00:22:03,880 --> 00:22:05,800 뭔가 말 : 게이브. 549 00:22:05,800 --> 00:22:07,140 뭔가 말 : 게이브. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 좋아. 552 00:22:09,020 --> 00:22:10,851 어쩌면 내가 스페이스 바를 충돌 또는 펑키 뭔가. 553 00:22:10,851 --> 00:22:11,600 다시 한 번 해 보자. 554 00:22:11,600 --> 00:22:13,020 Zamyla 그래서. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 다른 것들. 559 00:22:17,330 --> 00:22:19,430 그래서 무슨 일입니까? 560 00:22:19,430 --> 00:22:23,200 >> 그래서 우리는이 두 라인을 가지고 코드에서 getString가 두 번 호출된다. 561 00:22:23,200 --> 00:22:25,760 그리고, 단순히 해요 s 및 t를 비교하는 시도. 562 00:22:25,760 --> 00:22:28,370 그러나 무슨 일 후 정말 무엇을? 563 00:22:28,370 --> 00:22:31,180 좋고, 내 필기의 약 다소이 예제를 도살. 564 00:22:31,180 --> 00:22:34,630 그리고 이제 실제로 던져 보자 이 최대 여기뿐만 아니라. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> 그래서 우리는 선처럼이 문자열의 = getString에. 567 00:22:45,712 --> 00:22:48,295 그래서 단순히 첫번째입니다 해당 프로그램에서 흥미로운 라인. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 그러나이 모든 시간이되었습니다 무엇을 후드 아래에 무슨 일? 570 00:22:52,974 --> 00:22:55,890 음, 왼쪽에 사이드 캐릭터 라인은, 어떤 변수의 일부 유형은, 571 00:22:55,890 --> 00:22:56,785 그것은의를 불렀다. 572 00:22:56,785 --> 00:23:00,019 그래서 나는이 메모리를 사용하는 것을 알고, 또는 RAM, 어떻게 든 내 컴퓨터에서. 573 00:23:00,019 --> 00:23:02,060 그래서 추상적에 갈거야 사각형으로 그립니다. 574 00:23:02,060 --> 00:23:04,820 32 비트, 알고 보니하지만, 미래에 그에 대한 자세한. 575 00:23:04,820 --> 00:23:06,410 그리고 무슨 일이 여기 일이야? 576 00:23:06,410 --> 00:23:08,700 >> 글쎄, 확실히있는 getString 사용자로부터 문자열을 가져옵니다. 577 00:23:08,700 --> 00:23:11,360 그리고있는 getString이있어 Zamyla 또는 게이브 또는 Daven. 578 00:23:11,360 --> 00:23:14,640 그럼 첫 번째를 선택할 수 있습니다 이 중 Daven이었다. 579 00:23:14,640 --> 00:23:19,174 그래서 효과적으로 어떤 getString에가있어 내게는 첫 번째 경우에 D--V-E-N이었다. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 그리고, 그 밖의 무엇을하는 한 그것은 나에게 비밀리에 제공? 582 00:23:25,045 --> 00:23:25,920 청중 : [들리지] 583 00:23:25,920 --> 00:23:28,720 데이비드 J. 마란 : 네, / 0 또는 널 문자. 584 00:23:28,720 --> 00:23:30,550 그래서 효율적으로 나에게 문자열을했다. 585 00:23:30,550 --> 00:23:34,550 그러나 우리는 이미 이전부터 알고 문자열은 단지 배열되어 보이는 586 00:23:34,550 --> 00:23:37,895 문자, 이는 종료있어 이 특별한 감시 문자 / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> 그러나 이것은 해당하는 경우 이 사각형이고, 589 00:23:42,310 --> 00:23:44,160 이 분명히 훨씬 더 큰 사각형이다. 590 00:23:44,160 --> 00:23:46,830 그리고 실제로이입니다, 나는, 32 비트를 주장한다. 591 00:23:46,830 --> 00:23:49,500 그리고 이것은 분명 이상 32 비트, 이것이 아마도 때문 592 00:23:49,500 --> 00:23:51,583 팔에 8을 더한 8을 더한 8을 더한 플러스 팔, 593 00:23:51,583 --> 00:23:53,320 단지 ASCII 바이트 때문이다. 594 00:23:53,320 --> 00:23:57,030 어떻게 도대체 우리가 맞게 가고있다 여기이 작은 상자에 Daven? 595 00:23:57,030 --> 00:23:59,880 >> 글쎄, 무엇을 실제로 getString는거야? 596 00:23:59,880 --> 00:24:03,680 음,이 그리드는 여기를 나타냅니다 내 컴퓨터의 메모리 또는 RAM. 597 00:24:03,680 --> 00:24:07,564 그럼 임의의 경우 가정 해 봅시다 이들 각각은 바이트를 나타낸다 598 00:24:07,564 --> 00:24:09,730 우리는 각 생각할 수 바이트 어드레스를 갖는 것으로, 599 00:24:09,730 --> 00:24:13,830 33 옥스포드 스트리트 (Oxford Street), 또는 34 등 옥스포드 스트리트 (Oxford Street), 또는 35 옥스포드 스트리트 (Oxford Street). 600 00:24:13,830 --> 00:24:16,700 >> 그래서 가정은 주소가있는 것처럼 건물은 주소를 가지고, 601 00:24:16,700 --> 00:24:19,810 그래서 개별 바이트를 할 메모리 주소 나 번호가 602 00:24:19,810 --> 00:24:21,042 그 고유를 식별합니다. 603 00:24:21,042 --> 00:24:22,000 자,이 임의이다. 604 00:24:22,000 --> 00:24:25,370 하지만 난 갈거야, 간단하게하기 단지 규칙에 따라 16 진수 사용 605 00:24:25,370 --> 00:24:28,200 하지만 0X 다른 아무 의미 보다 "이 16 진수입니다." 606 00:24:28,200 --> 00:24:31,030 나는 주장거야 "D"는 메모리에 바이트 하나에 끝납니다. 607 00:24:31,030 --> 00:24:34,210 >> 난 아무것도 다른에 어떤 일이 일어나고 없어 메모리, 그래서 Daven 첫 번째 자리를 얻었다 608 00:24:34,210 --> 00:24:35,509 바이트 하나에서. 609 00:24:35,509 --> 00:24:36,800 이 후, 0x2로 될 것입니다. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 이 0x3으로 가고있다. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 이 0x4로 될 것입니다. 614 00:24:41,800 --> 00:24:43,025 이것은에서 0x5로 이동합니다. 615 00:24:43,025 --> 00:24:44,025 이것은이 0x6가 될 것입니다. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> 하지만 한 번 생각하기 시작 어떤 컴퓨터의 것에 대해 618 00:24:48,290 --> 00:24:50,710 후드 아래, 당신은 추론을 시작할 수 있습니다 619 00:24:50,710 --> 00:24:54,960 방법을, 몇 년 전 것 자체 C 구현했습니다. 620 00:24:54,960 --> 00:24:58,360 아마있는 getString는 무엇인가 returning-- 그것 때문에 621 00:24:58,360 --> 00:25:00,946 그렇지 않은 것 같은 느낌이 든다 반환 Daven, 그 자체, 622 00:25:00,946 --> 00:25:03,320 그는 확실히 않을거야 때문에 이 작은 상자 .--에 맞게 623 00:25:03,320 --> 00:25:05,090 그래서 무슨 일이있는 getString 아마 반환? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> 청중 : [들리지] 626 00:25:08,920 --> 00:25:10,540 >> 데이비드 J. 마란 : Daven의 위치입니다. 627 00:25:10,540 --> 00:25:12,770 그리고이 일을하고 있어요 지금까지 주 하나입니다. 628 00:25:12,770 --> 00:25:16,150 무엇 getString는 정말 반환하는 문자열 그 자체가 아닙니다. 629 00:25:16,150 --> 00:25:17,780 즉, 작은 흰색 거짓말 중 하나입니다. 630 00:25:17,780 --> 00:25:22,520 그것은의 주소를 반환하는 것 메모리에 문자열, 고유 주소입니다. 631 00:25:22,520 --> 00:25:24,820 Daven는 33 옥스포드 스트리트 (Oxford Street)에서 살고있다. 632 00:25:24,820 --> 00:25:29,310 하지만 더 간결하게, 개빈 살고 이 0x1에서 번호를 하나의 주소. 633 00:25:29,310 --> 00:25:32,280 >> 그래서은이에 넣어 도착 작은 상자는, 명확하게 634 00:25:32,280 --> 00:25:35,930 해당 문자열의 단지 주소입니다. 635 00:25:35,930 --> 00:25:38,110 그래서이 모든 시간이 이는 계속되고. 636 00:25:38,110 --> 00:25:41,650 하지만이 암시 무엇 지금은 모두가 s의 경우가 있다는 것입니다 637 00:25:41,650 --> 00:25:44,710 그 안에 수있어입니다 당신을 막을 수, 프로그래머, 638 00:25:44,710 --> 00:25:47,970 의 임의의 숫자를 넣어에서 어떤 변수 바로 점프 639 00:25:47,970 --> 00:25:49,080 메모리의 청크? 640 00:25:49,080 --> 00:25:51,320 그리고 실제로, 우리는 볼 수 있습니다 그 위협이 다음 시간이다. 641 00:25:51,320 --> 00:25:53,500 >> 하지만 지금은이 충분하지 느낀다. 642 00:25:53,500 --> 00:25:55,630 내가 말할 경우에, 저를 얻을 문자열, 당신은 나에게 Daven을 제공합니다. 643 00:25:55,630 --> 00:25:57,230 하지만 당신은 정말 나에게 Daven를 제공하지 않습니다. 644 00:25:57,230 --> 00:25:59,310 당신이 나에게주는 모든 Daven의 주소입니다. 645 00:25:59,310 --> 00:26:04,310 그때 나는 확실히 알고하는 방법 여기서 Daven이 시작되고 ends-- 646 00:26:04,310 --> 00:26:07,140 이야기의이 weird-- 점점 Daven의 시작과 끝나는, 647 00:26:07,140 --> 00:26:10,435 그리고, 다음 다음 메모리에 문자열이 시작? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> 글쎄, 당신은 나눠하는 경우 나 Daven의 시작, 650 00:26:13,620 --> 00:26:17,230 기본적으로, 내가 어떻게 알 수 있습니까 자신의 이름의 끝은 어디? 651 00:26:17,230 --> 00:26:20,550 특별한 널 문자, 어떤 더욱 중요한 지금이다 652 00:26:20,550 --> 00:26:23,040 아래 문자열 경우 후드는 단순히 식별 653 00:26:23,040 --> 00:26:25,820 고유 메모리에서의 위치에 의해. 654 00:26:25,820 --> 00:26:28,130 그래서 모든 시간은, 그건 무슨 일이 진행되고 있어요. 655 00:26:28,130 --> 00:26:32,470 >> 그래서 우리는 지금에서 볼 때 여기에 코드는 설명 656 00:26:32,470 --> 00:26:35,790 당신은 라인 (26)의 버그하고자하는 경우. 657 00:26:35,790 --> 00:26:39,560 왜 Zamyla 및 Zamyla 다른가? 658 00:26:39,560 --> 00:26:41,330 왜 게이브와 게이브 다른가? 659 00:26:41,330 --> 00:26:42,154 그래, 다시. 660 00:26:42,154 --> 00:26:43,390 >> 청중 : 그들은 서로 다른 주소를 가지고있다. 661 00:26:43,390 --> 00:26:45,931 >> 데이비드 J. 마란 : 간단하기 때문에 서로 다른 주소를 가지고있다. 662 00:26:45,931 --> 00:26:48,820 당신이있는 getString를 호출 할 때 때문에 다시 여기 빨리 할 거하는 663 00:26:48,820 --> 00:26:52,870 이 두번째 라인, 문자열인지 t, 나는 그 프로그램에서했던 것처럼, 664 00:26:52,870 --> 00:26:55,030 getString에 또 다른 전화와 동일합니다. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 내가 전화를 다음 번에 getString에, 내가 갈거야 667 00:26:58,670 --> 00:27:00,190 메모리의 다른 덩어리를 얻을 수 있습니다. 668 00:27:00,190 --> 00:27:02,220 >> getString는 허용됩니다 운영을 물어 669 00:27:02,220 --> 00:27:03,800 더 많은 메모리 시스템. 670 00:27:03,800 --> 00:27:07,894 이 같은 재사용 않을거야 여섯 바이트 매번. 671 00:27:07,894 --> 00:27:09,810 그것은 새를 얻을 것 메모리의 덩어리, 어떤 672 00:27:09,810 --> 00:27:12,780 t 얻을 것입니다 의미 여기에 다른 값입니다. 673 00:27:12,780 --> 00:27:15,380 >> 내가 그래서들 = 같음 t, 당신은 비교하지 않을 674 00:27:15,380 --> 00:27:17,880 이것에 대한 D 이이에 대한 V. 675 00:27:17,880 --> 00:27:19,588 이 비교하고 , 어떤이에 대한 676 00:27:19,588 --> 00:27:24,020 솔직히 꽤 useful-- useless--입니다 꽤 쓸모가 정말 사람 때문에 677 00:27:24,020 --> 00:27:25,830 문자열이 메모리에있는 경우 상관이야? 678 00:27:25,830 --> 00:27:26,850 >> 그리고 실제로, 우리는하지 않았습니다. 679 00:27:26,850 --> 00:27:28,980 그리고 우리는 안 갈거야 특히 돌보는 시작합니다. 680 00:27:28,980 --> 00:27:34,180 전용 버그가 발생할 수있을 정도로 보안 위협은 의지를 발생할 수 681 00:27:34,180 --> 00:27:36,100 우리는 실제로이 걱정하기 시작한다. 682 00:27:36,100 --> 00:27:37,230 그럼이 문제를 해결 할 수 있습니다. 683 00:27:37,230 --> 00:27:39,650 당신이 매우 간단하게 수정 밝혀졌습니다. 684 00:27:39,650 --> 00:27:42,600 >> 그리고 전에, 실제로하자 다시 공개, 어떤 것 685 00:27:42,600 --> 00:27:47,170 CS50 클래스의 경우는, 할 당신은 구현했다 686 00:27:47,170 --> 00:27:48,600 두 개의 문자열에 대한 비교. 687 00:27:48,600 --> 00:27:51,440 당신은 명확 단지의이 =의 t와 동일 사용할 수 없습니다. 688 00:27:51,440 --> 00:27:54,090 그러나 단지 논리적으로 어떻게 이 문자열을 비교할 것 689 00:27:54,090 --> 00:27:56,370 C 코드를 사용하여 문자열에 대해? 690 00:27:56,370 --> 00:27:56,880 그래. 691 00:27:56,880 --> 00:27:58,780 >> 청중 : 그냥 할 루프 [INAUDIBLE] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 데이비드 J. 마란 : 완벽 한. 694 00:28:01,670 --> 00:28:02,900 청중 : [들리지] 695 00:28:02,900 --> 00:28:03,310 데이비드 J. 마란 : 그래. 696 00:28:03,310 --> 00:28:05,390 그냥 루프 또는 위해를 사용 루프 또는 어떤있다. 697 00:28:05,390 --> 00:28:08,710 그러나 단지 기본 개념을 적용 할 경우 그 이 메모리 나 배열의 덩어리입니다 698 00:28:08,710 --> 00:28:11,590 이며 이것은 반복 모두 동시에. 699 00:28:11,590 --> 00:28:12,960 그리고 바로 문자를 비교합니다. 700 00:28:12,960 --> 00:28:14,260 >> 그리고 당신은 수있어 약간의주의, 당신 때문에 701 00:28:14,260 --> 00:28:16,247 한 손가락을 원하지 않는 다른 과거 이동 702 00:28:16,247 --> 00:28:18,080 한 문자열이 때문에 다른 것보다 더 많은 시간이 든다. 703 00:28:18,080 --> 00:28:21,380 그래서 당신이 확인하고 싶은거야 끝이 특별한 값, 널 (null). 704 00:28:21,380 --> 00:28:24,017 그러나 그것은 정말로에서, 말과 간단. 705 00:28:24,017 --> 00:28:26,100 그리고 솔직히 말해서, 우리는 필요가 없습니다 그 바퀴를 재발견합니다. 706 00:28:26,100 --> 00:28:27,960 다음 버전 두 가지이다. 707 00:28:27,960 --> 00:28:32,910 그리고 내가 여기서 말을하려고하고있어 것입니다 대신에 S를 비교는, t = 용 같음 708 00:28:32,910 --> 00:28:38,964 문자열 경우 내가 대신 말할거야 의 쉼표 t의 비교 = 0 같습니다. 709 00:28:38,964 --> 00:28:40,130 이제 문자열은 무엇을 비교한다? 710 00:28:40,130 --> 00:28:43,046 >> 그것은 함수의 밝혀 그 그 목적은 인생에서 C와 함께 제공 711 00:28:43,046 --> 00:28:44,650 두 문자열을 비교하는 것입니다. 712 00:28:44,650 --> 00:28:48,300 우리가 읽을 경우에, 비교 파문의 매뉴얼 페이지 또는 문서 또는 CS50 713 00:28:48,300 --> 00:28:50,630 참조, 그것은 것 단순히 당신이 파문을 알려 714 00:28:50,630 --> 00:28:55,730 부정적이든 수익을 비교 번호 또는 양수 또는 제로 715 00:28:55,730 --> 00:28:57,660 제로 의미 그들은 어디를 동일. 716 00:28:57,660 --> 00:28:58,570 >> 그러니 그냥 추측. 717 00:28:58,570 --> 00:29:00,390 그것은 무엇을하면 의미 할 수 있습니다 비교 수익을 저어 718 00:29:00,390 --> 00:29:02,110 음의 값 또는 양의 값? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 청중 : 크거나보다. 721 00:29:04,285 --> 00:29:05,570 데이비드 J. 마란 : 네, 보다 크거나보다 적은. 722 00:29:05,570 --> 00:29:08,640 그래서 당신은 전체를 정렬하고 싶다면 dictionary-- 문자열의 무리 723 00:29:08,640 --> 00:29:12,975 우리는 결국 road-- 다운 것 같은 완벽한 기능은 잠재적으로 사용하는, 724 00:29:12,975 --> 00:29:15,850 그것은 그렇게 것 때문에 당신을 위해 문자열의 비교, 그리고 이야기 725 00:29:15,850 --> 00:29:20,060 당신이 나 앞에 오는 수행 또는 수행 B 알파벳 전에 온다. 726 00:29:20,060 --> 00:29:21,490 우리는 정확하게 작업을 수행 할 수 있습니다. 727 00:29:21,490 --> 00:29:23,620 >> 그리고 다른 하나는 한주의 사항 이 예에서는 일. 728 00:29:23,620 --> 00:29:26,870 다른 무엇보다 높은 변경 이 주요 기능 최대? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 숯불 *. 731 00:29:29,350 --> 00:29:31,150 그리고 이것은 다른 선의의 거짓말이다. 732 00:29:31,150 --> 00:29:33,750 이 모든 시간 때했습니다 문자열을 쓰고, 733 00:29:33,750 --> 00:29:38,350 우리는 비밀리에 재 작성되었습니다 문자로 문자열 * 그래서 실제로 연타 734 00:29:38,350 --> 00:29:39,270 당신을 이해한다. 735 00:29:39,270 --> 00:29:42,450 >> 즉, CS50.h에서 우리는 결국 보 겠지만, 736 00:29:42,450 --> 00:29:45,950 우리는 동의어라는 문자열을 만든 그 문자 *와 같은 일입니다. 737 00:29:45,950 --> 00:29:49,910 그리고 지금은 만 알고 *,이 문맥에서, 적어도, 738 00:29:49,910 --> 00:29:51,286 주소를 의미합니다. 739 00:29:51,286 --> 00:29:52,210 >> 무엇의 주소? 740 00:29:52,210 --> 00:29:56,390 음, 사실은 내가 말했다 char *로, 그리고, * int 형 또는 * 뜨지 741 00:29:56,390 --> 00:30:00,820 char *로가 있음을 의미 문자의 주소입니다. 742 00:30:00,820 --> 00:30:06,770 그래서 여기이 작은 상자, 일명 문자열, 정말 형 char *로이다, 743 00:30:06,770 --> 00:30:10,490 어떤 말을 단순히 멋진 방법입니다, 이 상자에 주소를 이동합니다. 744 00:30:10,490 --> 00:30:12,430 그리고 무엇을 그 주소를 참조합니까? 745 00:30:12,430 --> 00:30:13,780 분명히, 문자. 746 00:30:13,780 --> 00:30:16,410 >> 그러나 우리는 절대적으로 수 INT * 및 다른 일을해야합니다. 747 00:30:16,410 --> 00:30:20,790 하지만 지금은 char *로 정말 가장입니다 간단하고 관심 중 하나. 748 00:30:20,790 --> 00:30:23,310 그래서이 문제는 것입니다 다시,하지만 상승. 749 00:30:23,310 --> 00:30:24,830 >> 나는이 프로그램을 열어 가정하자. 750 00:30:24,830 --> 00:30:27,670 지금 우리가 예측할 수 있는지 보자 무슨 일이이 코드를 잘못. 751 00:30:27,670 --> 00:30:31,140 이 프로그램에 그래서, 복사 공을, 난 가서 다시 전화를 거 752 00:30:31,140 --> 00:30:34,190 getString에 및 S의 값을 저장한다. 753 00:30:34,190 --> 00:30:38,800 >> 그리고, 내가 왜이 일을하고 있어요 단지 주 과거에서 알림으로? 754 00:30:38,800 --> 00:30:40,960 우리는 getString는 말을했다 가끔 null를 돌려줍니다. 755 00:30:40,960 --> 00:30:42,793 그것은 무엇을 의미 하는가하는 경우 getString는 null을 반환? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 문제가 발생했습니다. 758 00:30:46,034 --> 00:30:48,950 아마 문자열이 너무 의미 큰 메모리를 컴퓨터의 아웃. 759 00:30:48,950 --> 00:30:51,724 그것은 슈퍼, 슈퍼, 슈퍼를 발생 드물게 있지만 일어나지 않을 수있다. 760 00:30:51,724 --> 00:30:53,890 우리는 그것을 확인하려면, 그리고 이건 우리가하고있는 전부입니다. 761 00:30:53,890 --> 00:30:57,910 >> 그렇게하지 ​​않으면 우리는 지금 볼 수 있기 때문에 물건을 습관적으로 검사 시작 762 00:30:57,910 --> 00:31:00,870 널 (null)처럼, 당신은 수도 실제로 이동 시작 763 00:31:00,870 --> 00:31:03,106 메모리에 주소를 잘못이 있습니다. 764 00:31:03,106 --> 00:31:05,980 그리고 당신은 유도를 시작하려는 것 더 세분화 결함. 765 00:31:05,980 --> 00:31:08,360 또는 Mac 또는 PC에서 바로 컴퓨터를 일으키는 것은 매달려 766 00:31:08,360 --> 00:31:10,340 또는 프로그램은 잠재적으로 동결. 767 00:31:10,340 --> 00:31:14,930 >> 그래서 지금은, 복사 0.C에서 주장 나는 그 그런데 이러한 문자열을 복사 예정 768 00:31:14,930 --> 00:31:15,685 의 28 라인. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 그리고, 내가 갈거야 하단 항 771 00:31:18,750 --> 00:31:21,430 여기에 내가 갈거야 것을 이 중 하나를 변경합니다. 772 00:31:21,430 --> 00:31:22,330 >> 그래서이 문제를 확인할 수 있습니다. 773 00:31:22,330 --> 00:31:24,370 나는 우리의 오랜 친구의 strlen 함수를 호출하고 있습니다. 774 00:31:24,370 --> 00:31:28,960 그리고 그냥 영어로 설명 이 라인 (34)은 무엇을하고 있습니까? 775 00:31:28,960 --> 00:31:32,480 무엇 t 브래킷 공을 수행 왼쪽에 나타냅니다. 776 00:31:32,480 --> 00:31:32,980 그래. 777 00:31:32,980 --> 00:31:34,339 >> 청중 : t의 첫 번째 문자? 778 00:31:34,339 --> 00:31:35,880 데이비드 J. 마란 : t의 첫 번째 문자. 779 00:31:35,880 --> 00:31:36,379 그게 다야. 780 00:31:36,379 --> 00:31:40,024 t의 첫 번째 문자, 내가 원하는 대문자 버전을 할당 781 00:31:40,024 --> 00:31:41,190 t의 첫 번째 문자의. 782 00:31:41,190 --> 00:31:43,200 그래서이 활용된다 첫 번째 문자. 783 00:31:43,200 --> 00:31:46,340 그리고, 매우 마지막으로 내가 할 이 프로그램은 내가 여기 있어요 주장 784 00:31:46,340 --> 00:31:50,340 원래는, S 및 여기에 복사, t입니다. 785 00:31:50,340 --> 00:31:54,610 >> 그러나 이야기를 기반으로 우리 단지 문자열이 정말로 무엇인지에 대해 이야기 786 00:31:54,610 --> 00:31:57,520 정말 선 (28) 무엇인가 일을하고, 무엇을 787 00:31:57,520 --> 00:31:59,405 가는 결과 버그 화면에 있어야 하는가? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> 그래서 첫째, 첫 번째 질문, 28. 790 00:32:03,500 --> 00:32:09,040 문자열 t의 = s의 정말 뭐하는거야? 791 00:32:09,040 --> 00:32:16,430 우리는 왼쪽에있는 경우 여기에 측면 문자열 t의 = s의; 792 00:32:16,430 --> 00:32:19,400 그것은 나에게 한 상자를 제공합니다 여기 하나의 상자 여기. 793 00:32:19,400 --> 00:32:25,530 그리고,이 주소가 0X 가정하자 의 임의로,이 시간을 말 50 보자. 794 00:32:25,530 --> 00:32:28,847 어떤 문자열 t의 = s의 수행 후드 아래에 무엇입니까? 795 00:32:28,847 --> 00:32:30,340 >> 청중 : [들리지] 796 00:32:30,340 --> 00:32:34,100 >> 데이비드 J. 마란 : 그것은 메모리를 저장 이 주소, 그래서 × 50가 간다. 797 00:32:34,100 --> 00:32:37,980 지금 그래서 만약, 내가 처음으로 이동 t에서 문자를 대문자로, 798 00:32:37,980 --> 00:32:39,535 나는 효과적으로 s로 무엇을하고 있는가? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 제가 정말, 같은 일을하고있는 거죠? 801 00:32:43,450 --> 00:32:47,680 때문에 경우 주소 0x50-- 단지, I 여기 보드에 많은 공간을 필요가 없습니다, 802 00:32:47,680 --> 00:32:51,750 하지만,이 여기까지 × 50 있다고 가정 내 컴퓨터의 메모리 어딘가에. 803 00:32:51,750 --> 00:32:55,825 >> 그리고, 예를 들어, 게이브있다 이런 식으로, 여기 소문자입니다. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 그리고 나는 말했다 t 브래킷 0 대문자됩니다. 806 00:33:01,980 --> 00:33:04,860 음, t 브래킷 공입니다 t의 첫 번째 편지입니다. 807 00:33:04,860 --> 00:33:07,840 그래서 약간의 g는에 가고 가 큰 G. 그러나 문제 808 00:33:07,840 --> 00:33:09,410 무엇도를 가리 s는 않습니다입니까? 809 00:33:09,410 --> 00:33:10,300 >> 대상 : 동일합니다. 810 00:33:10,300 --> 00:33:11,841 >> 데이비드 J. 마란 : 똑같은 일이. 811 00:33:11,841 --> 00:33:16,342 그래서 아마도 간단한 설명, 구문은 조금 이상한 경우에도 마찬가지입니다. 812 00:33:16,342 --> 00:33:17,050 그래서이 작업을 수행 할 수 있습니다. 813 00:33:17,050 --> 00:33:20,210 ./copy-0을 누른 다음 복사 - 공을 확인하고. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 뭔가 말 : 게이브. 816 00:33:24,110 --> 00:33:26,760 그리고 불행하게도, 모두 그들 지금 자본화 한 817 00:33:26,760 --> 00:33:29,500 하지만 대한 기본 우리가 단순히있어 이유 818 00:33:29,500 --> 00:33:32,350 이제 주소를 처리. 819 00:33:32,350 --> 00:33:36,470 >> 그래서 우리가 어떻게에 시작 할까 주소인데 웃기 intended-- 820 00:33:36,470 --> 00:33:39,270 우리는 해결하기 위해 시작 어떻게 이 특정 문제? 821 00:33:39,270 --> 00:33:44,400 음, copy1.c에 가지려고하고있다 조금 더 복잡합니다. 822 00:33:44,400 --> 00:33:49,310 하지만 주장 것 개념적으로 간단한 솔루션을 제공한다. 823 00:33:49,310 --> 00:33:50,852 >> 첫 눈에 얻을 그래서 하드. 824 00:33:50,852 --> 00:33:53,560 첫번째 쉽지 않을 시간은 당신은 아마 그것을 입력 825 00:33:53,560 --> 00:33:57,440 하지만 문제는 경우 단순히 t의 = s의 단지 일을 826 00:33:57,440 --> 00:33:59,694 복사 주소, 무엇을, 내가 다시 당신을 선택할 수 있다면, 827 00:33:59,694 --> 00:34:02,110 해결책이 될 것입니다 실제로 문자열을 복사하는? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> 청중 : 우리는 아마거야 다시 루프를 사용한다. 830 00:34:06,770 --> 00:34:06,890 >> 데이비드 J. 마란 : 그래. 831 00:34:06,890 --> 00:34:08,390 그래서 우리는 다시 루프를 필요로하기 위하여려고하고있다. 832 00:34:08,390 --> 00:34:11,800 그리고 우리는 복사 할 경우 때문에 다른 문자열로 문자열의, 833 00:34:11,800 --> 00:34:14,120 우리는 아마 그것을 할 문자 단위. 834 00:34:14,120 --> 00:34:17,199 그러나 문제는 경우입니다 이것은 원래의 것입니다 835 00:34:17,199 --> 00:34:22,159 지금 우리는 명시 적으로 시작해야 t에 대해 메모리를 할당. 836 00:34:22,159 --> 00:34:24,320 >> 즉,하자 이 마지막으로 한 번 다시 그리기. 837 00:34:24,320 --> 00:34:28,659 이 문자열의 = getString는 경우. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 그리고의뿐만 아니라, 여기를 넣어 보자. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 이있는 getString입니다. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 무언가 그리고, 포토 그런 식으로 이전 될 것입니다, 844 00:34:43,860 --> 00:34:44,360 g-A-B-전자 / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 즉,이 같은 작은 선물을 보인다. 847 00:34:48,960 --> 00:34:53,650 s는 따라서,이 0x50이 호출 그것은 51, 52이 될 것. 848 00:34:53,650 --> 00:34:54,409 >> 그래서 이것은 × 50이다. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 그리고, 나는 문자열 t을한다. 851 00:34:59,690 --> 00:35:02,450 메모리에서, 그것은 단지에 무슨 나에게 이런 작은 광장을 제공합니다. 852 00:35:02,450 --> 00:35:04,080 그래서 중요한 단계는 이제 무엇인가? 853 00:35:04,080 --> 00:35:09,870 나는 t로의 복사 할 경우, 어떤 빈 우리가 여기에 기입해야합니까? 854 00:35:09,870 --> 00:35:12,050 아니면 우리에 필요한 것은 무엇 높은 수준에서합니까? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 그래? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 누군가? 859 00:35:17,020 --> 00:35:17,690 그래. 860 00:35:17,690 --> 00:35:19,214 >> 청중 : 우리는 [INAUDIBLE]으로해야합니다. 861 00:35:19,214 --> 00:35:21,380 데이비드 J. 마란 : 그래, 우리 이 빈을 작성해야합니다. 862 00:35:21,380 --> 00:35:24,340 그때 복사 할 수 없습니다 게이브의 이름을 대문자 863 00:35:24,340 --> 00:35:28,120 I는 운영 체제를 요청할 때까지 메모리의 또 다른 청크 864 00:35:28,120 --> 00:35:30,640 즉, 원본과 적어도 크다. 865 00:35:30,640 --> 00:35:32,130 그래서 질문을 우리에게 남긴다. 866 00:35:32,130 --> 00:35:36,080 >> 내가 운영 체제를 부탁 한 어떻게 단순한 작은 pointer--에 대한 867 00:35:36,080 --> 00:35:38,530 이 호출 될 때, 주소, pointer--하지 868 00:35:38,530 --> 00:35:40,980 간단한 작은 상자 이 같은 캐릭터라고? 869 00:35:40,980 --> 00:35:44,200 어떻게 운영을 물어요 메모리의 큰 청크에 대한 시스템? 870 00:35:44,200 --> 00:35:48,430 지금까지, 나는 단지 그 다시 쪘 간접적있는 getString을 호출하여. 871 00:35:48,430 --> 00:35:50,740 어떻게 getString에있다 메모리를 얻기도? 872 00:35:50,740 --> 00:35:53,430 >> 음, 거기에 밝혀 여기 다른 기능 873 00:35:53,430 --> 00:35:55,160 것을 우리가 지금 사용하는 시작합니다. 874 00:35:55,160 --> 00:35:59,780 이제,이 방법이 더 애매한 than-- 보인다 나는이게 뭐지 볼 수있는 유일한 일입니다 875 00:35:59,780 --> 00:36:03,150 이 라인은 방법이 더 애매한 보인다 그것은 언뜻해야한다. 876 00:36:03,150 --> 00:36:04,650 그러나 현실을 떨어져 애타게 할 수 있습니다. 877 00:36:04,650 --> 00:36:07,950 >> 왼쪽에, 나는 char *로 t 있습니다. 878 00:36:07,950 --> 00:36:13,280 영어의 자, 공식화 시작하자 기술적 인 전문 용어의 적절한 문장. 879 00:36:13,280 --> 00:36:19,757 그래서이 할당 된 char 형의 변수는 t라고 *. 880 00:36:19,757 --> 00:36:21,090 이제, 정말 무엇을 의미 하는가? 881 00:36:21,090 --> 00:36:23,881 >> 글쎄, 그 의미, 내가 무엇을 갈거야 t이라는 변수에 넣어? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 문자의 주소입니다. 884 00:36:26,402 --> 00:36:28,360 그래서, 그냥 간단 보다 합리적인 방법 885 00:36:28,360 --> 00:36:29,930 의 좌측을 설명. 886 00:36:29,930 --> 00:36:32,890 그래서 여기 만이 상자를 만듭니다. 887 00:36:32,890 --> 00:36:34,760 그래서 오른쪽, 아마도 것입니다 888 00:36:34,760 --> 00:36:37,170 더 큰 것을 할당 할 메모리의 방법 덩어리? 889 00:36:37,170 --> 00:36:38,340 그래서이 떨어져 애타게 할 수 있습니다. 890 00:36:38,340 --> 00:36:41,131 >> 그것은 첫눈에 압도 하지만 내부 여기 무슨 일이야? 891 00:36:41,131 --> 00:36:43,740 첫째, malloc에​​, 거기에있는 우리의 새로운 친구가 분명히있다 892 00:36:43,740 --> 00:36:45,450 "메모리를 할당 할 수 있습니다." 893 00:36:45,450 --> 00:36:49,560 그래서이 전달되는 인수입니다 그것으로, 그래서 꽤 큰 논쟁. 894 00:36:49,560 --> 00:36:50,970 그래서이 떨어져 애타게 할 수 있습니다. 895 00:36:50,970 --> 00:36:53,410 >> 의의 나 strlen 물론, 대표 찌를 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 청중 : 문자의 수입니다. 898 00:36:55,600 --> 00:36:56,710 데이비드 J. 마란 : 그냥 의 문자의 수입니다. 899 00:36:56,710 --> 00:36:59,040 그래서 S의 길이, 원래의 문자열입니다. 900 00:36:59,040 --> 00:37:00,350 그래서 G-A-B-E. 901 00:37:00,350 --> 00:37:02,320 그래서 아마 네이 경우입니다. 902 00:37:02,320 --> 00:37:05,485 이유는 후에 1 일을하고 있어요 의의 strlen 함수를 호출? 903 00:37:05,485 --> 00:37:06,360 청중 : [들리지] 904 00:37:06,360 --> 00:37:07,590 데이비드 J. 마란 : 그 내용은 특별한 널 문자. 905 00:37:07,590 --> 00:37:11,260 당신이 저를 요구하는 경우에의 길이 무엇 게이브의 이름은, 내가 네 말을 하겠어. 906 00:37:11,260 --> 00:37:14,480 후드 아래에,하지만, 내가 필요 널 문자에 대한 그 다섯 번째 바이트. 907 00:37:14,480 --> 00:37:16,100 내가 일을하고 있어요 그래서 그입니다. 908 00:37:16,100 --> 00:37:21,730 >> 지금 만 경우에 당신이 실행하는 이외의 컴퓨터 프로그램은, 말 909 00:37:21,730 --> 00:37:24,610 CS50 장비, 여기서 문자의 크기 910 00:37:24,610 --> 00:37:26,350 다를 수 있습니다 내 자신의 computer--에서 911 00:37:26,350 --> 00:37:30,590 나는이를 호출 할 수 있습니다 밝혀 운영자를 sizeof, 그냥 컴퓨터를 요청 912 00:37:30,590 --> 00:37:32,870 의 크기 무엇인가 이 컴퓨터에서 숯불? 913 00:37:32,870 --> 00:37:37,400 >> 그리고이 다섯을 곱하여 문자의 크기에 의해 그 예 914 00:37:37,400 --> 00:37:40,440 대부분의 컴퓨터에서 것이다 단지 하나의 malloc 수 915 00:37:40,440 --> 00:37:44,830 날이 큰에 할당 할 것입니다 여기 오른쪽에 이상 메모리의 덩어리. 916 00:37:44,830 --> 00:37:47,140 그리고 그것은 return-- 것 그것은 그래서 그것은 function--입니다 917 00:37:47,140 --> 00:37:48,265 무엇을 나에게 돌아가는거야? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 청중 : 주소? 920 00:37:51,830 --> 00:37:53,709 데이비드 J. 마란 : 무엇의 주소? 921 00:37:53,709 --> 00:37:55,250 청중 : 메모리가 할당? 922 00:37:55,250 --> 00:37:56,450 데이비드 J. 마란 :의 메모리가 할당. 923 00:37:56,450 --> 00:37:59,189 그래서 나는 솔직히 아무 생각이 곳은 끝날 것입니다. 924 00:37:59,189 --> 00:38:01,480 나는 그 제안거야 그것은 0x88의에서 끝낼거야. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 완전 임의하지만, × 50가 아닌 다른 곳, 927 00:38:06,009 --> 00:38:08,800 운영체제 때문에, 무엇 Windows 및 Mac OS는 나를 위해,이다 928 00:38:08,800 --> 00:38:11,230 이주고 있는지 확인 나 RAM의 다른 덩어리. 929 00:38:11,230 --> 00:38:14,210 >> 그래서이 값이입니다 메모리의 청크 끝낼 수 있습니다. 930 00:38:14,210 --> 00:38:16,060 그래서이 함께 0x88, 여기에서 끝나는 것입니다. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 그래서 지금 명확하게 이해 할 수 있습니다 본와 동일하지 않은 것을 933 00:38:21,570 --> 00:38:23,960 그들이 가리키는 것 때문에 메모리의 다른 덩어리. 934 00:38:23,960 --> 00:38:29,980 지금 실제로 복사 할 경우에 따라서 에서의이 제안 된 솔루션을 할 수 있습니다. 935 00:38:29,980 --> 00:38:36,870 >> , 그냥 가서 루프를 만들어 보자 와 t 브래킷을 난의 브래킷 난을 가져옵니다. 936 00:38:36,870 --> 00:38:39,760 지금은 사용할 수 있기 때문에 이 배열과 같은 표기법 937 00:38:39,760 --> 00:38:43,390 때문에 비록 malloc에​​ 매우 일반적으로 나에게 메모리를 할당 938 00:38:43,390 --> 00:38:45,290 메모리는 연속적인 바이트입니다. 939 00:38:45,290 --> 00:38:47,240 바이트, 바이트, 바이트, 다시 다시 다시하는. 940 00:38:47,240 --> 00:38:50,030 >> 나는 프로그래머로 확실하게 할 수 배열로 취급하는 941 00:38:50,030 --> 00:38:55,090 나는이 마지막으로 친숙한를 사용할 수 있다는 것을 의미 그냥 대괄호 표기법. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> 그래서 나 때문에이 일시 정지 할 수 이것도, 한꺼번에 많은이며 944 00:39:00,020 --> 00:39:03,530 기본 개념은 다시 정리해 보면 비록 문자열이며, 모든 시간, 945 00:39:03,530 --> 00:39:05,550 새로운 데이터 유형 자체 아니다. 946 00:39:05,550 --> 00:39:10,150 그것은 바로 소위 포인터이다 캐릭터의 주소, 947 00:39:10,150 --> 00:39:12,650 이는 단지 의미는 숫자입니다 인간의 규칙에 따라 948 00:39:12,650 --> 00:39:15,350 우리는 0X 무언가로 작성하는 경향이있다. 949 00:39:15,350 --> 00:39:18,590 >> 하지만, 숫자에 불과하다 33 옥스포드 스트리트 (Oxford Street)와 같은, 950 00:39:18,590 --> 00:39:20,530 이는이 될 일이 CS 건물의 주소. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 이러한 세부 사항에 대한 질문? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 그래? 955 00:39:25,289 --> 00:39:28,530 >> 관객 : 왜 우리가 확인 할 동일 t에 null로? 956 00:39:28,530 --> 00:39:30,740 >> 데이비드 J. 마란 : 왜 우리를 이렇게 null로 동일한 t를 확인? 957 00:39:30,740 --> 00:39:33,250 우리는 documentation--를 읽는다면 malloc에​​ 대한 좋은 question--, 958 00:39:33,250 --> 00:39:37,020 그것은 작은 글씨로 말 것 때로는 malloc에​​ null의 반환 할 수 있습니다 959 00:39:37,020 --> 00:39:38,080 다만, getString에있다. 960 00:39:38,080 --> 00:39:41,820 그리고 실제로, getString에 null을 반환 차례로, malloc에​​ null을 반환하는 경우, 961 00:39:41,820 --> 00:39:43,130 getString에 malloc을 사용하기 때문이다. 962 00:39:43,130 --> 00:39:46,400 >> OS한다면 즉, 일어날 수 맥 OS, 윈도우, 무엇이든, 단순히 963 00:39:46,400 --> 00:39:48,130 당신을위한 메모리가 부족합니다. 964 00:39:48,130 --> 00:39:49,820 그래서 거기에 무슨 일이 있었는지. 965 00:39:49,820 --> 00:39:52,910 >> 그리고 내가 한 가지를 공개하자 그것은 단지 당신의 마음을 날려 버릴 수 있습니다 966 00:39:52,910 --> 00:39:55,100 또는 완전히 너무 멀리 회선을 통해합니다. 967 00:39:55,100 --> 00:39:59,770 그러나 저를 뽑아 보자 복사 루프 같은, 968 00:39:59,770 --> 00:40:05,480 어느 순간 전, 리콜했다 이. t 브래킷 난의 브래킷 난을 가져옵니다. 969 00:40:05,480 --> 00:40:06,740 >> 니스와 사용자 친화적 인. 970 00:40:06,740 --> 00:40:09,330 다시 둘째 주 같은 느낌. 971 00:40:09,330 --> 00:40:14,920 그러나이 버전은 실제로이 될 수 있습니다 애매한 보이는이로 재 작성. 972 00:40:14,920 --> 00:40:18,280 그것은 기술이라고 포인터이다 산술 어드레스 산술. 973 00:40:18,280 --> 00:40:19,600 그런데 왜이 일을 하는가? 974 00:40:19,600 --> 00:40:22,220 >> 이제 귀찮게, C의 저자는 사용하기로 결정 975 00:40:22,220 --> 00:40:25,070 다른 목적을 위해 * 기호. 976 00:40:25,070 --> 00:40:29,020 우리는 이미 한 번 사용 봤어요 의미 문자 *는 "나에게 변수를 제공 977 00:40:29,020 --> 00:40:31,210 즉 포함 것 문자의 주소입니다. " 978 00:40:31,210 --> 00:40:33,990 그런 맥락에서 그래서 문자 * "나에게 변수를 제공합니다."를 의미한다 979 00:40:33,990 --> 00:40:40,050 >> 불행하게도, 당신은 *하지 않고 사용하는 경우 그것의 앞에 단어, 문자 등, 980 00:40:40,050 --> 00:40:41,905 그것이 지금이라고 참조 연산자. 981 00:40:41,905 --> 00:40:43,530 그리고 우리는 오래 전에이 더 많이 볼 수 있습니다. 982 00:40:43,530 --> 00:40:44,930 그러나 그것은 단지 "로 이동"을 의미합니다. 983 00:40:44,930 --> 00:40:49,070 누군가가 나에게 건네 경우는 말처럼 종이에 "33 옥스포드 스트리트 (Oxford Street)," 984 00:40:49,070 --> 00:40:53,830 나는 "* 33 옥스포드 스트리트 (Oxford Street)"를 할 경우 그 의미 "CS 건물에 길을 간다." 985 00:40:53,830 --> 00:40:57,220 >> 그래서 * 그냥 경우 이동 수단 그것의 앞에 어떤 단어가 없습니다. 986 00:40:57,220 --> 00:40:59,100 그래서 명확하게, t 무엇인가? 987 00:40:59,100 --> 00:41:03,250 t는 청크의 주소입니다 다시 내게 주어진 메모리. 988 00:41:03,250 --> 00:41:06,650 의는 분명 무엇의 주소입니다 이 예에서 우리가 논의했습니다, 989 00:41:06,650 --> 00:41:07,500 소문자 게이브의? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 의 주소입니다 해주길 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 청중 : 문자열입니다. 994 00:41:12,460 --> 00:41:14,126 데이비드 J. 마란 : 게이브의 원래 이름의. 995 00:41:14,126 --> 00:41:16,660 그래서의 주소입니다 이 메모리 덩어리. 996 00:41:16,660 --> 00:41:22,220 그래서 만약 내가 t + 난 - 예고, 우리의 오래된 친구입니다. 997 00:41:22,220 --> 00:41:24,770 그냥 인덱스 변수 그 최대에 0에서 반복이야 998 00:41:24,770 --> 00:41:26,960 스트링 (S)의 길이. 999 00:41:26,960 --> 00:41:30,367 그래서, 다음, 0, 1이 될 것 다음이, 다음 세, 다음 네. 1000 00:41:30,367 --> 00:41:33,200 그럼이 새로운 조립하자 스크래치와 같은 퍼즐 조각, 만약에 당신, 1001 00:41:33,200 --> 00:41:36,140 비록 다시 구문 스크래치보다 훨씬 더 비전이다. 1002 00:41:36,140 --> 00:41:39,522 그래서 t는 어드레스 +이다 내가 나에게 줄 수 있겠나 1003 00:41:39,522 --> 00:41:42,480 수 있기 때문에 이들 모두 우리는 16 진수로 드로잉했습니다 번호. 1004 00:41:42,480 --> 00:41:43,560 그러나 그들은 단지 숫자 야. 1005 00:41:43,560 --> 00:41:49,960 >> t의 주소는 우리가 말한다면 했다 0x88의는 0x88의 플러스 제로거야. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 당신은 편안 아니더라도 아직 진수와 추측을. 1008 00:41:53,980 --> 00:41:54,410 >> 청중 : 원래. 1009 00:41:54,410 --> 00:41:55,850 >> 데이비드 J. 마란 : 0x88의 정지. 1010 00:41:55,850 --> 00:41:58,910 그래서 * 무엇을 의미하는 0x88의입니까? 1011 00:41:58,910 --> 00:42:02,670 그것은 의미 "거기에 갈"의미 효과적으로, "여기에 손가락을 넣어." 1012 00:42:02,670 --> 00:42:06,930 그리고 지금의 우측 이 식, * 다음 괄호에, 1013 00:42:06,930 --> 00:42:11,586 의 i는을 인의 의미 + 여기에 작은 g의 최대 해결합니다. 1014 00:42:11,586 --> 00:42:16,220 S + 0은 물론이다 어떤 S, S. 1015 00:42:16,220 --> 00:42:21,230 >> 그래서 지금, 그것은 *들, 야하는 단지 * 33 등 옥스포드 스트리트 (Oxford Street) 주소로 이동을 의미 1016 00:42:21,230 --> 00:42:22,010 의. 1017 00:42:22,010 --> 00:42:24,170 그래서 여기에이 손가락, 오른손입니다. 1018 00:42:24,170 --> 00:42:26,050 그래서 나는 무엇에 복사하지? 1019 00:42:26,050 --> 00:42:30,260 입니다 오른쪽에있는 것은, 게이브, 여기에 여기에 약간 g. 1020 00:42:30,260 --> 00:42:32,750 >> 그리고 그 영향 루프의 첫 번째 반복, 1021 00:42:32,750 --> 00:42:36,200 당신은 외모에도 불구하고, 제안 된 무엇보다 미친 더 복잡 1022 00:42:36,200 --> 00:42:42,110 우리는 전에 본 적이 간단하게 말하고있다 여기와 여기에 문자를 복사합니다. 1023 00:42:42,110 --> 00:42:44,700 그것은 당신에게 두 위치에지도를주고있다. 1024 00:42:44,700 --> 00:42:46,130 >> 그리고 우리는이 훨씬 더 많은 것을 볼 수 있습니다. 1025 00:42:46,130 --> 00:42:50,600 하지만 지금은, 희망은이다 이러한 기본 개념 중 일부를 소개합니다. 1026 00:42:50,600 --> 00:42:53,550 그리고 실제로, 이제 살펴 보자 여기에 최종 프로그램을, 1027 00:42:53,550 --> 00:42:57,480 다음 약속 클레이 메이션, 있는 모든 것이 바로 할 것입니다. 1028 00:42:57,480 --> 00:42:57,980 좋아. 1029 00:42:57,980 --> 00:43:01,680 그래서 나는 거기에 우리가 갈 망정 열 수 있습니다. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 우리가 다시 올 거는데 ... 그래서 보자 오래 전에이 사진에. 1032 00:43:05,440 --> 00:43:08,360 내가 여기이 마지막 예제를 열겠습니다. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> 그래서 여기에 슈퍼, 슈퍼입니다 수행 프로그램 1035 00:43:12,710 --> 00:43:15,050 다음과 같은 작업을 수행합니다 인생에서 아무것도 없습니다. 1036 00:43:15,050 --> 00:43:18,740 그것은 첫째 두 개의 변수, 배, 선언 이 시간이 상이 할 수 있습니다 Y,, 1037 00:43:18,740 --> 00:43:19,240 그 자체. 1038 00:43:19,240 --> 00:43:20,448 그들은 그 자체 정수 아니에요. 1039 00:43:20,448 --> 00:43:22,899 그들은 * 분명히 아르 int 형. 1040 00:43:22,899 --> 00:43:25,690 그러니 사람이, 무슨 뜻인가 데이터를 입력하면, 사용자 변수 1041 00:43:25,690 --> 00:43:26,860 int 형 * 별이다? 1042 00:43:26,860 --> 00:43:30,240 즉, int 형의 주소입니다. 1043 00:43:30,240 --> 00:43:31,990 >> 그래서 난 아직 아무 생각도 없어. 1044 00:43:31,990 --> 00:43:35,150 그것은 단지 "결국 넣어 의미 여기 INT의 주소. " 1045 00:43:35,150 --> 00:43:38,340 이 글은 어디서든 × 50, 0x88의, 메모리는 주소가 진행되어 가고있는 것입니다. 1046 00:43:38,340 --> 00:43:40,200 그리고 그 Y는 무엇입니까 뿐만 아니라, 될 것이다. 1047 00:43:40,200 --> 00:43:44,920 >> 내가 지금 말을하면 X = malloc을 (를 sizeof (int)를), 이 말의 멋진 방법입니다, 1048 00:43:44,920 --> 00:43:49,000 헤이 운영체제의 malloc 비아 크기 나에게 충분한 메모리를 제공 1049 00:43:49,000 --> 00:43:52,370 아마 중간,의 32 비트 또는 4 바이트가 될 것. 1050 00:43:52,370 --> 00:43:53,680 >> 그래서 malloc에​​ 무엇을 반환합니까? 1051 00:43:53,680 --> 00:43:55,250 MALLOC는 주소를 반환합니다. 1052 00:43:55,250 --> 00:43:57,020 그렇다면 X에 저장을 당할 것이다? 1053 00:43:57,020 --> 00:44:00,600 청크의 주소 메모리, 4 바이트, 즉의 malloc 1054 00:44:00,600 --> 00:44:03,360 그냥 물어 나를 위해 발견 운영체제. 1055 00:44:03,360 --> 00:44:08,240 >> 이제 한편, 선 여기 네, * X = 42. 1056 00:44:08,240 --> 00:44:09,990 다만, 명확하게 거기 무슨 일이야? 1057 00:44:09,990 --> 00:44:11,530 왼쪽에, X *. 1058 00:44:11,530 --> 00:44:13,610 그 * 33 옥스포드 스트리트 (Oxford Street)처럼. 1059 00:44:13,610 --> 00:44:15,523 그래서 * X는 무엇을 의미? 1060 00:44:15,523 --> 00:44:16,450 >> 청중 :로 이동합니다. 1061 00:44:16,450 --> 00:44:17,908 >> 데이비드 J. 마란 : 그 주소로 이동합니다. 1062 00:44:17,908 --> 00:44:20,466 어디든지의 덩어리 메모리가로 이동합니다. 1063 00:44:20,466 --> 00:44:21,979 그리고 분명, 어떤이 넣어? 1064 00:44:21,979 --> 00:44:22,520 대상 : 42. 1065 00:44:22,520 --> 00:44:23,580 데이비드 J. 마란 : 42. 1066 00:44:23,580 --> 00:44:25,650 좋아, * y를, 같은 생각. 1067 00:44:25,650 --> 00:44:26,860 Y의 주소로 이동합니다. 1068 00:44:26,860 --> 00:44:31,740 이 숫자 13을 넣어, 하지만 순간에 Y는 무엇인가? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 청중 : 더 메모리가 Y에 대한이 없습니다. 1071 00:44:34,630 --> 00:44:35,710 데이비드 J. 마란 :이 Y에 대한 메모리가 없습니다. 1072 00:44:35,710 --> 00:44:38,215 그래서 아마 Y 작업을 수행 우리가 말을했습니다으로 포함? 1073 00:44:38,215 --> 00:44:38,520 >> 청중 : 쓰레기. 1074 00:44:38,520 --> 00:44:39,480 >> 데이비드 J. 마란 : 일부 쓰레기 값입니다. 1075 00:44:39,480 --> 00:44:41,320 이제 쓰레기 값은 여전히​​ 숫자입니다. 1076 00:44:41,320 --> 00:44:43,160 아직 주소로 오인 될 수 있습니다. 1077 00:44:43,160 --> 00:44:45,160 그것은 사람처럼입니다 아래로 뭔가를 휘 갈겨 1078 00:44:45,160 --> 00:44:48,002 나는 의미로 잘못 해석 거리에 따라 일부 건물. 1079 00:44:48,002 --> 00:44:50,460 그리고 당신은 단지로 이동하려고하면 당신이 소유하지 않는 일부 건물, 1080 00:44:50,460 --> 00:44:53,710 또는 일부 메모리 덩어리를하지 않았습니다 주어, 나쁜 일이 일어날 수 있습니다. 1081 00:44:53,710 --> 00:44:57,740 컴퓨터는 다른 충돌, 또는 수 예측할 수없는 문제가 발생할 수 있습니다. 1082 00:44:57,740 --> 00:45:01,310 >> 그래서, 다음, 빙키이 소개됩니다. 1083 00:45:01,310 --> 00:45:04,290 나는 아직도 20 기억 일부 홀수 년 후, 1084 00:45:04,290 --> 00:45:07,200 나는 때 결국 어디에 포인터를 이해했다. 1085 00:45:07,200 --> 00:45:09,520 >> 당신이 경우, 말을하는 것입니다 어떤 삼분 여기에 남겨 1086 00:45:09,520 --> 00:45:12,170 내가 모른다고 생각 포인터를 이해, 실현 1087 00:45:12,170 --> 00:45:14,410 나는 20 기억했다 어떤 미친 이유 년 1088 00:45:14,410 --> 00:45:17,140 언제, 왜 결국 침몰 에, 나의 가르침에 앉아 1089 00:45:17,140 --> 00:45:19,501 동료, Nishat 메타에서 엘리엇 식당 홀 뒷면. 1090 00:45:19,501 --> 00:45:21,250 지금, 나는 기억했습니다 이이 이었기 때문에 1091 00:45:21,250 --> 00:45:23,920 주제 I,에서의 일 특히, 고투. 1092 00:45:23,920 --> 00:45:26,470 그리고 나서, 그것은 결국 눌려 같은 나는 많은 화제를 감히 1093 00:45:26,470 --> 00:45:27,460 결국 것이다. 1094 00:45:27,460 --> 00:45:32,590 그리고 지금, 그 모두를 느끼게합니다 행복하고 더욱 설득력, 1095 00:45:32,590 --> 00:45:35,360 의가에서 최종 살펴 보자 우리 여기 빙키에서 마지막 삼분, 1096 00:45:35,360 --> 00:45:37,675 우리의 친구 닉에서 스탠포드에서 Parlante. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [동영상 재생] 1099 00:45:41,580 --> 00:45:42,750 >> 안녕, 빙키. 1100 00:45:42,750 --> 00:45:43,500 일어나! 1101 00:45:43,500 --> 00:45:45,960 그것은 포인터 재미를위한 시간이다. 1102 00:45:45,960 --> 00:45:47,012 >> 그게 뭐지? 1103 00:45:47,012 --> 00:45:48,723 포인터에 대해 알아? 1104 00:45:48,723 --> 00:45:50,580 아, 케이크! 1105 00:45:50,580 --> 00:45:53,563 >> - 그럼, 시작하는, 우리가 추측 몇 포인터 필요할 것. 1106 00:45:53,563 --> 00:45:54,390 >> - 좋아. 1107 00:45:54,390 --> 00:45:57,930 이 코드는, 두 개의 포인터를 할당 어떤 정수를 가리킬 수 있습니다. 1108 00:45:57,930 --> 00:45:58,430 - 좋아. 1109 00:45:58,430 --> 00:46:02,140 글쎄, 난 두 개의 포인터를 참조하지만, 무엇을 가리키는 것 같습니다하지 않습니다. 1110 00:46:02,140 --> 00:46:02,980 >> - 맞아요. 1111 00:46:02,980 --> 00:46:05,100 처음에, 포인터 아무것도 가리 키지 않습니다. 1112 00:46:05,100 --> 00:46:08,030 그들이이라고 가리 일 pointees과의 그들을 설정 1113 00:46:08,030 --> 00:46:09,370 별도의 단계. 1114 00:46:09,370 --> 00:46:10,220 >> 오른쪽, 오른쪽, 오. 1115 00:46:10,220 --> 00:46:10,950 나는 그것을 알고 있었다. 1116 00:46:10,950 --> 00:46:12,385 pointees는 별도입니다. 1117 00:46:12,385 --> 00:46:14,315 어, 그래서 당신은 어떻게 pointee를 할당합니까? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> - 좋아. 1120 00:46:15,960 --> 00:46:18,970 음,이 코드를 할당 새로운 정수 pointee, 1121 00:46:18,970 --> 00:46:20,950 이 부품 세트 x는 그것을 가리 키도록. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> - 이봐, 그건 잘 보인다. 1124 00:46:23,230 --> 00:46:25,060 그래서이 일을합니다. 1125 00:46:25,060 --> 00:46:25,990 >> - 좋아. 1126 00:46:25,990 --> 00:46:30,455 나는 포인터의 X 역 참조거야 그 pointee에 숫자 42을 저장합니다. 1127 00:46:30,455 --> 00:46:32,830 이 트릭을 위해, 나는 필요 내 역 참조의 마술 지팡이. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> 역 참조 - 당신의 마술 지팡이? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 거기 있었고 그 좋아요. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -이 코드가 어떻게 생겼는지입니다. 1134 00:46:41,080 --> 00:46:44,110 난 그냥 수, [POP]를 설정합니다 1135 00:46:44,110 --> 00:46:44,700 >> - 이봐, 이봐. 1136 00:46:44,700 --> 00:46:46,140 저기 간다. 1137 00:46:46,140 --> 00:46:50,980 >> x는 다음에 역 참조를하고 그럼 화살표는 pointee에 액세스 할 수 있습니다. 1138 00:46:50,980 --> 00:46:53,160 이 경우, 거기에 상점 42. 1139 00:46:53,160 --> 00:46:57,710 헤이 번호를 저장하는 데 사용하려고 다른 포인터 내지 13, Y. 1140 00:46:57,710 --> 00:46:58,760 >> - 좋아. 1141 00:46:58,760 --> 00:47:03,270 난 그냥 y로 여기 가서, 및 수 13 셋업을 얻을. 1142 00:47:03,270 --> 00:47:07,930 그리고,의 완드 걸릴 역 참조 바로 [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> 오! 1144 00:47:08,960 --> 00:47:09,500 >> 헤이, 오! 1145 00:47:09,500 --> 00:47:11,090 그것은 작동하지 않았다. 1146 00:47:11,090 --> 00:47:15,630 빙키, 나는 역 참조 생각하지 않는다, 말 당신이 알고 있기 때문에 Y는, 좋은 생각이다 1147 00:47:15,630 --> 00:47:17,850 pointee을 설정 별도의 단계입니다. 1148 00:47:17,850 --> 00:47:20,450 그리고 나는 우리가했다고 생각하지 않습니다. 1149 00:47:20,450 --> 00:47:21,480 >> - 좋은 점. 1150 00:47:21,480 --> 00:47:21,980 그래. 1151 00:47:21,980 --> 00:47:25,680 우리는 포인터 y를 할당하지만, 우리 결코 pointee를 가리 키도록 설정합니다. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> - 아주 관찰력. 1154 00:47:28,616 --> 00:47:30,240 이봐, 당신은이 빙키 좋은 찾고 있습니다. 1155 00:47:30,240 --> 00:47:33,400 당신은 그래서 고칠 수 y를 점 X와 같은 pointee에? 1156 00:47:33,400 --> 00:47:34,000 >> - 네. 1157 00:47:34,000 --> 00:47:36,780 내 마법 지팡이를 사용합니다 포인터 할당의. 1158 00:47:36,780 --> 00:47:38,740 >> 이 되서 하죠 ~ 전에 같은 문제? 1159 00:47:38,740 --> 00:47:39,240 - 아니. 1160 00:47:39,240 --> 00:47:40,660 이 pointees을 만지지 않습니다. 1161 00:47:40,660 --> 00:47:44,450 그것은 단지 하나의 포인터를 변경 또 같은 일을 가리 킵니다. 1162 00:47:44,450 --> 00:47:45,450 >> - 오, 알았어요. 1163 00:47:45,450 --> 00:47:48,200 X 같은 곳으로 지금 Y 점. 1164 00:47:48,200 --> 00:47:48,910 그래서 기다립니다. 1165 00:47:48,910 --> 00:47:49,950 이제 y는 고정되어있다. 1166 00:47:49,950 --> 00:47:51,120 그것은 pointee있다. 1167 00:47:51,120 --> 00:47:54,510 그래서 당신의 지팡이를 시도 할 수 있습니다 13 이상을 보내 다시 역 참조. 1168 00:47:54,510 --> 00:47:56,510 >> OK, - 음. 1169 00:47:56,510 --> 00:47:58,160 여기 간다. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> 야, 저것 봐. 1171 00:47:59,340 --> 00:48:00,750 이제 Y에 작품을 역 참조. 1172 00:48:00,750 --> 00:48:04,991 그리고 포인터를 공유하고 있기 때문에 한 pointee 것을, 그들은 둘 다 13을 참조하십시오. 1173 00:48:04,991 --> 00:48:05,490 그래. 1174 00:48:05,490 --> 00:48:06,870 공유, 뭐든간에. 1175 00:48:06,870 --> 00:48:08,820 그래서 우리는 이제 장소를 전환 할 건가요? 1176 00:48:08,820 --> 00:48:09,440 >> 오, 봐. 1177 00:48:09,440 --> 00:48:10,830 우리는 시간이 없어. 1178 00:48:10,830 --> 00:48:11,570 >> 하지만 ... 1179 00:48:11,570 --> 00:48:13,530 >> 셋 포인터 규칙을 기억하시오. 1180 00:48:13,530 --> 00:48:16,560 번호 하나, 기본 구조 당신이 포인터를 가지고있다, 1181 00:48:16,560 --> 00:48:18,680 그리고 그것은 pointee에 이상 가리 킵니다. 1182 00:48:18,680 --> 00:48:20,640 그러나 포인터 pointee은 별도 1183 00:48:20,640 --> 00:48:22,610 그리고 일반적인 오류 포인터를 설정하는 것, 1184 00:48:22,610 --> 00:48:25,000 하지만 그것을 pointee을 제공하는 것을 잊지합니다. 1185 00:48:25,000 --> 00:48:28,170 >> 넘버 투, 포인터 역 참조 포인터에서 시작 1186 00:48:28,170 --> 00:48:31,050 이상의 화살표를 다음과 그 pointee에 액세스 할 수 있습니다. 1187 00:48:31,050 --> 00:48:33,400 우리 모두가 알다시피,이 가있는 경우에만 작동 1188 00:48:33,400 --> 00:48:36,270 pointee, 한 가지 번호를 하나의 규칙을 다시 가져옵니다. 1189 00:48:36,270 --> 00:48:39,000 >> 수 세, 포인터 할당 한 포인터를 취 1190 00:48:39,000 --> 00:48:42,320 과를 가리 키도록 변경 또 다른 포인터와 동일 pointee. 1191 00:48:42,320 --> 00:48:44,160 할당 후 그래서, 이 포인터 1192 00:48:44,160 --> 00:48:45,910 같은 pointee를 가리 킵니다. 1193 00:48:45,910 --> 00:48:47,990 가끔은 그런는 공유라고. 1194 00:48:47,990 --> 00:48:49,740 그리고 정말, 이제 모든 설정이 끝났다. 1195 00:48:49,740 --> 00:48:50,277 안녕 지금. 1196 00:48:50,277 --> 00:48:51,110 [END VIDEO 재생] 1197 00:48:51,110 --> 00:48:52,568 데이비드 J. 마란 : 그 CS50은 여기까지. 1198 00:48:52,568 --> 00:48:55,110 우리는 다음 주에 볼 수 있습니다. 1199 00:48:55,110 --> 00:48:56,064