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